Vue框架和前后端開發(fā)詳解
1. 抽象工廠模式
- 針對工廠方法模式無法創(chuàng)建一組相關(guān)或相互依賴對象的問題,引入了抽象工廠模式
- 抽象工廠模式的官方定義
是一種為訪問類提供一個創(chuàng)建一組相關(guān)或相互依賴對象的接口,且訪問類無須指定所要產(chǎn)品的具體類就能得到同族的不同等級的產(chǎn)品的模式結(jié)構(gòu)。
敲黑板,畫重點(diǎn):
- 提供一個創(chuàng)建一組相關(guān)或相互依賴對象的接口:相對工廠方法模式,抽象工廠模式的抽象工廠定義了多個創(chuàng)建對象的接口
- 不同等級的產(chǎn)品:
- 不同類的產(chǎn)品,又叫不同等級的產(chǎn)品。
- 工廠方法模式中,只考慮同一等級產(chǎn)品的生產(chǎn),只是同一等級的產(chǎn)品也有很多不同的型號
- 就像電子廠只生產(chǎn)游戲機(jī),游戲機(jī)有多種類型:插卡的游戲機(jī)、插光盤的游戲機(jī)、便攜式游戲機(jī)(玩俄羅斯方塊的那種??)
- 同族的產(chǎn)品
- 現(xiàn)實(shí)生活中,電子廠不止生產(chǎn)游戲機(jī),還生產(chǎn)電視機(jī)、音箱等產(chǎn)品。
- 這些由一個工廠生產(chǎn)的不同等級的產(chǎn)品,被稱為產(chǎn)品族
- 因此,同族的不同等級的產(chǎn)品,就是指一個工廠能生產(chǎn)多類產(chǎn)品,與前面的創(chuàng)建一組相關(guān)或相互依賴對象的接口呼應(yīng)
- 以海爾和TCL兩家公司為例,產(chǎn)品族和產(chǎn)品等級的示意圖如下
總結(jié)起來:
- 抽象工廠模式中,工廠不再只生產(chǎn)一類產(chǎn)品,而是可以生產(chǎn)多類產(chǎn)品
- 也就是說,工廠可以支持多種類型的對象的創(chuàng)建
- 調(diào)用者無需指定對象類型(具體的類),就可以通過工廠類創(chuàng)建多種類型的對象
2. UML圖
抽象工廠模式的UML圖如下:
- 抽象工廠(Abstract Factory):定義了多個創(chuàng)建產(chǎn)品的接口,可以創(chuàng)建多個不同等級的產(chǎn)品
- 具體工廠(Abstract Factory):實(shí)現(xiàn)抽象工廠中的抽象方法,負(fù)責(zé)創(chuàng)建具體的產(chǎn)品
- 抽象產(chǎn)品(Product): 相對工廠方法模式,抽象工廠模式中的產(chǎn)品將是多種等級的。因此,一般會定義多個抽象產(chǎn)品
3. 代碼示例
- 以海爾和TCL兩家公司為例,實(shí)現(xiàn)抽象工廠模式
創(chuàng)建兩個抽象產(chǎn)品類
- 假設(shè)產(chǎn)品只有電視機(jī)和空調(diào)兩種等級
public interface TV { void play(); } public interface AirConditioner { void heat(); }
創(chuàng)建具體產(chǎn)品類
- 實(shí)現(xiàn)抽象產(chǎn)品接口,為海爾和TCL公司創(chuàng)建具體產(chǎn)品類
public class HaierTV implements TV{ @Override public void play() { System.out.println("海爾電視機(jī),銷量全國領(lǐng)先"); } } public class TCLTV implements TV{ @Override public void play() { System.out.println("TCL牌電視機(jī),家家都在看的電視機(jī)"); } } public class HaierAirConditioner implements AirConditioner{ @Override public void heat() { System.out.println("海爾牌空調(diào),制熱效果好,省電又省心~"); } } public class TCLAirConditioner implements AirConditioner { @Override public void heat() { System.out.println("TCL牌空調(diào),制熱效果杠杠的"); } }
創(chuàng)建抽象工廠類
- 有兩個接口,分別用于創(chuàng)建電視機(jī)和空調(diào)
public interface AbstractFactory { TV getTV(); AirConditioner getAirConditioner(); }
創(chuàng)建具體工廠類
- 為海爾和TCL兩家公司,創(chuàng)建具體工廠類,實(shí)現(xiàn)具體產(chǎn)品的創(chuàng)建
public class HaierFactory implements AbstractFactory{ @Override public TV getTV() { return new HaierTV(); } @Override public AirConditioner getAirConditioner() { return new HaierAirConditioner(); } } public class TCLFactory implements AbstractFactory{ @Override public TV getTV() { return new TCLTV(); } @Override public AirConditioner getAirConditioner() { return new TCLAirConditioner(); } }
4. 總結(jié)
4.1 抽象工廠模式的總結(jié)
- 創(chuàng)建屬于不同操作系統(tǒng)的視窗構(gòu)件,是抽象工廠模式最早的應(yīng)用。
- 如 Java 的 AWT 中的 Button 和 Text 等構(gòu)件,在 Windows 和 UNIX 中的本地實(shí)現(xiàn)是不同的。
適用場景:
- 需要創(chuàng)建的對象是一系列相關(guān)或相互依賴的產(chǎn)品族
- 不同環(huán)境,需要使用不同產(chǎn)品族(系統(tǒng)中有多個產(chǎn)品族,但每次只使用其中的某一族產(chǎn)品)
開閉原則的傾斜性
- 增加一個產(chǎn)品族,只需要增加一個新的工廠類,無需修改已有的工廠 —— 滿足開閉原則
- 增加一個新等級的產(chǎn)品,抽象工廠和具體工廠都需要進(jìn)行修改 —— 不滿足開閉原則
- 這樣的現(xiàn)象被稱作:開閉原則的傾斜性
4.2 工廠模式的總結(jié)
簡單工廠模式
- 從長期的編程習(xí)慣總結(jié)出來的簡單工廠模式,需要調(diào)用者傳入對象名稱,才能為其創(chuàng)建指定的對象
- 新增對象類型時(shí),需要修改已有代碼,違背了開閉原則
工廠方法模式
- 每個工廠只負(fù)責(zé)創(chuàng)建一種類型的對象,是對簡單工廠模式的升級改造
- 雖然遵守了開閉原則,但是容易工廠類過多,且不支持創(chuàng)建一組相關(guān)或相互依賴的對象的場景
抽象工廠模式
- 將一組相關(guān)或相互依賴的對象,抽象成產(chǎn)品族,每個工廠負(fù)責(zé)創(chuàng)建一個產(chǎn)品族
- 開閉原則的傾斜性:新增產(chǎn)品族,滿足開閉原則;新增產(chǎn)品,不滿足開閉原則
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Vue項(xiàng)目部署后提示刷新版本的實(shí)現(xiàn)代碼
這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目部署后提示刷新版本的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-06-06Vue-Access-Control 前端用戶權(quán)限控制解決方案
Vue-Access-Control是一套基于Vue/Vue-Router/axios 實(shí)現(xiàn)的前端用戶權(quán)限控制解決方案。這篇文章主要介紹了Vue-Access-Control:前端用戶權(quán)限控制解決方案,需要的朋友可以參考下2017-12-12Vue實(shí)現(xiàn)右鍵菜單組件的超詳細(xì)教程(支持快捷鍵)
右鍵菜單組件非常常見,所有的前端開發(fā)工程師都會遇到類似的功能組件開發(fā)需求,這篇文章主要給大家介紹了關(guān)于Vue實(shí)現(xiàn)右鍵菜單組件的超詳細(xì)教程,文中介紹的方法支持快捷鍵,需要的朋友可以參考下2024-02-02