设计模式——工厂方法模式和抽象工厂模式
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
為什么使用工廠方法?
Duck duck=new MallardDuck(); //使用接口讓代碼更具有彈性 //但是還是建立了具體類的實例在有一群相關類時,當場會寫出這樣的代碼
Duck duck;if(picnic){duck=new MallarDuck(); } if(hunting){duck=new DecoyDuck(); } else if(inBathTub){duck=new RubberDuck(); }在很多情況下,我們究竟要實例化哪個具體類,要在運行時有一些條件來決定。當看到這樣的代碼,一旦有變化或者擴展,就必須重新打開這段代碼進行檢查修改。通常這樣修改過的代碼將早場部分系統(tǒng)更難維護和更新,而且也更容易犯錯。
直接使用new不符合“對修改關閉”的原則,我們應該依據“找出會變化的原則,把它們從不變的部分分離出來”的原則寫代碼。
解決方案:
什么是工廠方法?
工廠方法模式:定義了一個創(chuàng)建對象的接口,但由子類決定要實例化的類是哪一個。工廠方法讓類把實例化推遲到子類。
抽象工廠模式:提供一個接口,用于創(chuàng)建相關或依賴對象的家族,而不需要明確指定特定類。
?
原則:依賴抽象,不要依賴具體類。
目的:為了得到更松的耦合,更有彈性的設計。
?
簡單的理解:
實例 -> 類 -> 類工廠
實例 -> 類 -> 類工廠 -> 抽象工廠
?
工廠方法是個方法,是在提供的抽象接口中,用來創(chuàng)建“一個產品”的方法。
createPizza();然后具體子類,通過實現此接口來實現這個createPizze()的具體方法。
抽象工廠是個接口,在接口中,創(chuàng)建“很多產品”(或者說一個產品家族,因為產品之間有一定的聯系)。
createDough(); createSauce(); createCheese(); //多個產品,但是相互之間有聯系,都是一種披薩的配料然后具體子類,通過實現此接口來實現創(chuàng)建這個產品家族,而其中每一個create方法,都可以使用工廠方法來實現。
可以說抽象工廠的實現中,運用到了工廠方法。
換句話說:抽象工廠的任務是定義一個負責創(chuàng)建一組產品的接口,這個接口內的每一個方法都負責創(chuàng)建一個具體產品,同時我們利用實現抽象工廠的子類來提供這些具體的算法。所以,在抽象工廠中利用工廠方法實現生產方法是相當自然的做法。
?
轉載于:https://my.oschina.net/u/3786691/blog/1808100
總結
以上是生活随笔為你收集整理的设计模式——工厂方法模式和抽象工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebStorm添加多个项目到当前工程目
- 下一篇: 【WPF】MVVM模式的3种comman