工厂模式
属于[创建型],分为简单工厂、工厂方法、抽象工厂。
1.简单工厂模式
针对接口编程,封装变化。
public class PizzaStore {
// 预定一个pizza
Pizza orderPizza(String type) {
// new一个pizza
Pizza pizza = null;
if ("cheese".equals(type)) {
pizza = new CheesePizza();
} else if ("veggie".equals(type)) {
pizza = new VeggiePizza();
}
// 准备食材
pizza.prepare();
// 烘焙
pizza.bake();
// 装盒
pizza.box();
return pizza;
}
}
5-11行的创建一个pizza针对具体编程,可以先抽离出来
public class PizzaStore {
// 预定一个pizza
Pizza orderPizza(String type) {
// new一个pizza
Pizza pizza = createPizza(type);
// 准备食材
pizza.prepare();
// 烘焙
pizza.bake();
// 装盒
pizza.box();
return pizza;
}
public Pizza createPizza(String type) {
Pizza pizza = null;
if ("cheese".equals(type)) {
pizza = new CheesePizza();
} else if ("veggie".equals(type)) {
pizza = new VeggiePizza();
}
return pizza;
}
}
然后把16-24行createPizza封装到简单工厂中。工厂处理创建对象的细节,而orderPizza只关心从工厂得到一个Pizza,不用关心创建哪个Pizza对象。
public class SimplePizzaFactory {
public Pizza createPizza(String type) {
Pizza pizza = null;
if ("cheese".equals(type)) {
pizza = new CheesePizza();
} else if ("veggie".equals(type)) {
pizza = new VeggiePizza();
}
return pizza;
}
}
public class PizzaStore {
// 预定一个pizza
Pizza orderPizza(String type) {
// new一个pizza
Pizza pizza = new SimplePizzaFactory().createPizza(type);
// 准备食材
pizza.prepare();
// 烘焙
pizza.bake();
// 装盒
pizza.box();
return pizza;
}
}
createPizza放到SimplePizzaFactory工厂类中的理由是:SimplePizzaFactory可以有许多客户,虽然此处只看到orderPizza()方法中引用到了。所以把创建Pizza代码包装进一个类,当以后实现改变时,只需要修改这个类即可。
组合PizzaStore类中17行new SimplePizzaFactory()。
我们知道对象组合可以在运行时动态改变行为,因为我们可以更换不同的实现。
public class PizzaStore {
SimplePizzaFactory factory;
public PizzaStore(SimplePizzaFactory factory) {
this.factory = factory;
}
// 预定一个pizza
Pizza orderPizza(String type) {
// new一个pizza
Pizza pizza = factory.createPizza(type);
// 准备食材
pizza.prepare();
// 烘焙
pizza.bake();
// 装盒
pizza.box();
return pizza;
}
}
以上即为简单工厂模式介绍。
2.工厂方法模式
待完善
3.抽象工厂模式
待完善