4. 工厂模式

    工厂模式主要是用来创建对象。文中的例子,不同的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准备原料-->烤焙-->切块-->装箱。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值