讀後總結:(主要參考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();
後續實現**後續編輯。。。。。。
《Head First 設計模式》 總結
什麼是模式?模式是在某種情景下對某些問題的解決方案。是不是一定用上模式的 才是好 不是,用簡單合適的方法解決問題。不要遇到什麼問題都用必殺技,必殺技也需要醞釀的時間,如果可以一拳把對方秒殺的話,壓根沒必要用必殺技。那什麼時候才需要用設計模式?設計模式不是刻意去運用的,而是遇到某個情景,觸發到你的印象...
headfirst設計模式
花了一周多一點的時間看完了headfirst的設計模式。看完之後有一種恍然大悟的感覺,仔細想想有覺得自己好像什麼也看懂。簡單說下對這本書的一點感悟吧,headfirst的書比較通俗易懂,之前看了四人幫的設計模式,看一半就有一種痛不欲生的感覺,自己水平有限,看不懂,也就沒在勉強自己了。對於模式其實簡單...
HeadFirst 設計模式 工廠模式
定義乙個建立物件的介面,由子類決定要例項化的類。工廠方法將類例項推遲到子類。依賴倒置。第一種方式是 class pizzastore public pizza orderpizza string type class pizzafactory pizza pizza null 將pizza這個例項提...