4. 工厂模式

来源:互联网 发布:windows mobile 编辑:程序博客网 时间:2024/06/03 19:56
    工厂模式主要是用来创建对象。文中的例子,不同的pizza store制作不同种类的pizza。对于不同的pizza store可以抽象出来一个抽象的pizza store类,对于不同种类的pizza也可以抽象出来一个抽象的pizza类。pizza store需要实现制作pizza的方法,所以在实例化具体pizza store对象后,调用orderPizza根据传入的不同pizza类型,创建具体的pizza,之后委托这个具体的pizza对象进行准备原料、烤焙、切块、和装箱,这一系列操作。这样做的优点在于将创建具体对象(具体的pizza)的工作延迟到子类(具体的pizza store)进行,达到对象创建的过程封装的目的,产品的“实现“从”使用“中解耦
    orderPizza在pizzaStore的基类中定义,不需要知道哪个具体的pizza参与操作,这就是解耦。工厂模式将创建对象的工作集中在一个对象或一个方法中,避免代码重复,方便维护。并且遵循依赖倒置原则,无论是高层组件pizza store,还是底层组件具体的pizza,都依赖于抽象。缺点是pizza store依赖于具体pizza的实现,当pizza的种类增加时,createPizza方法也要做修改。

Pizza *pizzaStore::orderPizza(int type){     Pizza *pizza;     pizza = createPizza(type);     pizza->prepare();     pizza->bake();     pizza->cut();     pizza->box();    return pizza;}Pizza *concretePizzaStoreA::createPizza(int type){     if(type == PIZZA_A)          return new concretePizzaA();     else(type == PIZZA_B)          return new concretePizzaB();}
client:// 1.创建一个pizza店PizzaStore *pizzaStore = new concretePizzaStoreA();// 2.下单pizzaStore->orderPizza(type);// 3. orderPizza中调用createpizza创建具体pizza对象// 4. 对pizza准备原料-->烤焙-->切块-->装箱。