HeadFirst设计模式总结_第四章工厂模式

读后总结:(主要参考P160+P161)

1.依赖倒置原则:P142(抽象化的思想设计,面向接口编程,面向扩展而不是面向修改。)

    变量不可以持有具体类的引用;(基类使用new,即持有具体类的引用,使用工厂方法将new具体类部分下放到子类中,即行如。。= new NYPizzaStore();)

    不要让类派生自具体类;(如果派生自具体类,就会依赖具体类,请派生自抽象类或接口,即行如pizzaStore nyPizzaStore =)

    不要覆盖基类中已实现的方法;(基类中以实现的方法应该尽量适用于所有派生类)

2.工厂方法P160和抽象方法P161的异同:P158(为了实现披萨店从具体种类的披萨中被解耦,即以后不会再修改披萨店抽象基类,只需多个新子类重载createPizza()方法即可)

    工厂方法:将具体披萨类的实例化放到了披萨店子类中,披萨店直接使用抽象类型即可。过程如下:

       (1)新建披萨店pizzaStore nyPizzaStore = new NYPizzaStore();

       (2)下订单nyPizzaStore.orderPizza("chess"); (其中orderPizza已经在基类中实现,orderPizza不知道具体的披萨类型)

       (3)制作披萨Pizza pizza = creatPizza("chess");在其中会return new NYStyleChessPizza()

       (4)最后的制作流程pizza.prepare();等

    抽象工厂:创建一个产品家族抽象类,eg:原料工厂抽象类_包括产品家族如create芝士(),creat火腿(),creat盐()等;而工厂方法仅仅创建一个产品抽象类,eg:披萨店抽象类_包括产品如create披萨();

       (1)新建披萨店pizzaStore nyPizzaStore = new NYPizzaStore();

       (2)下订单nyPizzaStore.orderPizza("chess"); (其中orderPizza已经在基类中实现,orderPizza不知道具体的披萨类型)

       (3)制作披萨Pizza pizza = creatPizza("chess");在其中会return new ChessPizza(“nyIngredientFactory”)

       (4)最后的制作流程pizza.prepare();等,有了抽象工厂后改写原来的prepare()方法,(正式开始抽象方法的部分:在其中会芝士dough = ingredientFactory.creatDough();其他原料类似。在具体的原料工厂中如return new TinCrustDough();

后续实现代码后续编辑。。。。。。


猜你喜欢

转载自blog.csdn.net/liuhuoer/article/details/78782424