简单工厂
简单工厂其实不是一个设计模式,反而更像一种编程习惯。如下,将产生Pizza的代码分离出来作为工厂。
public class SimplePizzaFactory {
public Pizza createPizza(String type) {
Pizza pizza = null;
if ("cheese".equals(type)) {
pizza = new CheesePizza();
} else if ("clam".equals(type)) {
pizza = new ClamPizza();
}
return pizza;
}
}
工厂方法
工厂方法:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
如下就是一个工厂方法的示意图。
PizzaStore中定义了一个抽象方法createPizza,然后由子类来决定如何进行实例化。
public abstract class PizzaStore {
public Pizza orderPizza(String type) {
Pizza pizza;
pizza = createPizza(type);
//其他操作
return pizza;
}
abstract Pizza createPizza(String type);
}
public class WuHanPizzaStore extends PizzaStore {
@Override
Pizza createPizza(String type) {
Pizza pizza = null;
if ("cheese".equals(type)) {
pizza = new CheesePizza();
} else if ("clam".equals(type)) {
pizza = new ClamPizza();
}
return pizza;
}
}
抽象工厂
抽象工厂:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
如下就是一个抽象工厂示意图。
如下PizzaIngredientFactory接口就是一个抽象工厂,在相关的家族类中实现这个接口,编写特定的创建实例方法。
public interface PizzaIngredientFactory {
public Cheese createCheese();
public Clam createClam();
}
public class WuHanPizzaIngredientFactory implements PizzaIngredientFactory {
@Override
public Cheese createCheese() {
return new ReggianoCheese();
}
@Override
public Clam createClam() {
return new FreshClam();
}
}