『设计模式』简单工厂模式
23種設(shè)計(jì)模式+額外常用設(shè)計(jì)模式匯總 (持續(xù)更新)
簡(jiǎn)單工廠模式
簡(jiǎn)單工廠模式也被稱為靜態(tài)工廠模式;使用簡(jiǎn)單工廠模式可以將產(chǎn)品的“消費(fèi)”和生產(chǎn)完全分開,客戶端只需要知道自己需要什么產(chǎn)品,如何來使用產(chǎn)品就可以了,具體的產(chǎn)品生產(chǎn)任務(wù)由具體的工廠類來實(shí)現(xiàn)。工廠類根據(jù)傳進(jìn)來的參數(shù)生產(chǎn)具體的產(chǎn)品供消費(fèi)者使用。這種模式使得更加利于擴(kuò)展,當(dāng)有新的產(chǎn)品加入時(shí)僅僅需要在工廠中加入新產(chǎn)品的構(gòu)造就可以了。
優(yōu)點(diǎn)
- 工廠類含有必要的判斷邏輯,可以決定在什么時(shí)候創(chuàng)建哪一個(gè)產(chǎn)品類的實(shí)例,客戶端與產(chǎn)品的創(chuàng)建分離,客戶端可以免除直接創(chuàng)建產(chǎn)品對(duì)象的責(zé)任,不需要知道產(chǎn)品創(chuàng)建的邏輯,而僅僅工廠類含有必要的判斷邏輯,可以決定在什么時(shí)候創(chuàng)建哪一個(gè)產(chǎn)品類的實(shí)例,客戶端可以免除直接創(chuàng)建產(chǎn)品對(duì)象的責(zé)任,而僅僅"消費(fèi)消費(fèi)"產(chǎn)品。簡(jiǎn)單工廠模式通過這種做法實(shí)現(xiàn)了對(duì)責(zé)任的分割。
缺點(diǎn)
- 當(dāng)產(chǎn)品有復(fù)雜的多層等級(jí)結(jié)構(gòu)時(shí),工廠類只有自己,以不變應(yīng)萬變,就是模式的缺點(diǎn)。因?yàn)楣S類集中了所有產(chǎn)品創(chuàng)建邏輯,一旦不能正常工作,整個(gè)系統(tǒng)都要受到影響。當(dāng)產(chǎn)品有復(fù)雜的多層等級(jí)結(jié)構(gòu)時(shí),工廠類只有自己,以不變應(yīng)萬變,就是模式的缺點(diǎn)。因?yàn)楣S類集中了所有產(chǎn)品創(chuàng)建邏輯,一旦不能正常工作,整個(gè)系統(tǒng)都要受到影響。
- 同時(shí),系統(tǒng)擴(kuò)展困難,一旦添加新產(chǎn)品就不得不修改工廠邏輯,有可能造成工廠邏輯過于復(fù)雜。同時(shí),系統(tǒng)擴(kuò)展困難,一旦添加新產(chǎn)品就不得不修改工廠邏輯,有可能造成工廠邏輯過于復(fù)雜。
- 另外,簡(jiǎn)單工廠模式通常使用靜態(tài)工廠方法,這使得無法由子類繼承,造成工廠角色無法形成基于繼承的等級(jí)結(jié)構(gòu)
- 工廠類集成了所有產(chǎn)品的創(chuàng)建邏輯,當(dāng)工廠類出現(xiàn)問題,所有產(chǎn)品都會(huì)出現(xiàn)問題;還有當(dāng)新增加產(chǎn)品都會(huì)修改工廠類,違背開閉原則
使用場(chǎng)景
- 如果想要完全封裝隔離具體實(shí)現(xiàn),讓外部只能通過接口來操作封裝體,則可以選用簡(jiǎn)單工廠。讓客戶端通過工廠來獲取相應(yīng)的接口,而無需關(guān)心具體的實(shí)現(xiàn)。
- 如果想要把對(duì)外創(chuàng)建對(duì)象的職責(zé)集中管理
和控制,可以選用簡(jiǎn)單工廠
實(shí)現(xiàn)
簡(jiǎn)單工廠模式的構(gòu)成
具體的工廠角色:Factory;在工廠中可以調(diào)用方法生產(chǎn)出具體的某個(gè)類型的產(chǎn)品;
抽象的產(chǎn)品角色:Father_Product;在抽象產(chǎn)品類型中可以聲明抽象接口,在具體的產(chǎn)品類中實(shí)現(xiàn);
具體的產(chǎn)品角色:Ex_Product_1 和Ex_Product_2;在具體的類中必須實(shí)現(xiàn)抽象類的接口,也可以實(shí)現(xiàn)自己的業(yè)務(wù)邏輯。
簡(jiǎn)單工廠模式的UML
代碼實(shí)現(xiàn)
別詬病我這中文寫代碼,問就是不是做項(xiàng)目,這樣更容易知道自己寫的啥!
package 簡(jiǎn)單工廠模式;public abstract class Father_Product { //定義產(chǎn)品的父類String Attribute; //產(chǎn)品必備屬性public abstract void Method(); //產(chǎn)品的功能 } package 簡(jiǎn)單工廠模式;public class Ex_Product_1 extends Father_Product {@Overridepublic void Method() {System.out.println("我是第一種產(chǎn)品,這是我的功能");}} package 簡(jiǎn)單工廠模式;public class Ex_Product_2 extends Father_Product {@Overridepublic void Method() {System.out.println("我是第二種產(chǎn)品,這是我的功能");}} package 簡(jiǎn)單工廠模式;public class Factory {public Father_Product createProduct(String productName) {Father_Product product = null;switch(productName){case "1":product = new Ex_Product_1();//生產(chǎn)產(chǎn)品1break;case "2":product = new Ex_Product_2();//生產(chǎn)產(chǎn)品2break;default:break;}return product;} }:
寫在最后:
我叫風(fēng)骨散人,名字的意思是我多想可以不低頭的自由生活,可現(xiàn)實(shí)卻不是這樣。家境貧寒,總得向這個(gè)世界低頭,所以我一直在奮斗,想改變我的命運(yùn)給親人好的生活,希望同樣被生活綁架的你可以通過自己的努力改變現(xiàn)狀,深知成年人的世界里沒有容易二字。目前是一名在校大學(xué)生,預(yù)計(jì)考研,熱愛編程,熱愛技術(shù),喜歡分享,知識(shí)無界,希望我的分享可以幫到你!
如果有什么想看的,可以私信我,如果在能力范圍內(nèi),我會(huì)發(fā)布相應(yīng)的博文!
謝謝大家的閱讀!😘
總結(jié)
以上是生活随笔為你收集整理的『设计模式』简单工厂模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: coreseek (sphinx)+ M
- 下一篇: 『设计模式』HR问了我朋友什么是简单工厂