简单工厂模式

it2025-02-03  10

1 工厂模式

1.1 模式引出

如何将实例化具体类的代码从应用中抽离出来,或者封装起来,使他们不会干扰应用的其他部分?

Pizza OrderPizza(string type) { // 根据pizza的类型,实例化正确的具体类,然后将其赋值给pizza实例变量 if (type.equals("cheese")) { pizza = new CheesePizza(); } else if (type.equals("greek")) { pizza = new GreekPizza(); } else if (type.equals("pepperoni")) { pizza = new PepperoniPizza(); } pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; }

现在最好将创建对象移到orderPizza()之外,要把创建pizza的代码移到另一个对象中,由这个新对象专职创建pizza,这个新对象称为“工厂”。下面就来进行代码实现吧!

1.2 代码实现

class SimplePizzaFactory { Pizza createpizza(string type) { Pizza pizza = nullptr; if (type.equals("cheese")) { pizza = new CheesePizza(); } else if (type.equals("greek")) { pizza = new GreekPizza(); } else if (type.equals("pepperoni")) { pizza = new PepperoniPizza(); } return pizza; } }

这样似乎只是把问题搬到另一个对象了,问题依然存在。SimplePizzaFactory可以有许多的客户,虽然目前只有orderpizza是它的客户,可能还有pizzashopmenu,homedelivery。所以把创建披萨的代码包装进类后,当以后实现改变时,只需要修改这个类即可。

1.3 重做PizzaStore类

class PizzaStore { SimplePizzaFactory factory; public PizzaStore(SimplePizzaFactory factory) { this.factory = factory; } public Pizza OrderPizza(string type) { Pizza pizza; pizza = factory.createpizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } }
最新回复(0)