1. 程式人生 > >HeadFirst設計模式總結_第四章工廠模式

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();

後續實現程式碼後續編輯。。。。。。