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