10 21每日部落格

2022-09-19 03:45:11 字數 1405 閱讀 4243

抽象工廠模式

模式動機

當系統所提供的工廠所需生產的具體產品並不是乙個簡單的物件,而是多個位於不同產品等級結構中屬於不同型別的具體產品時需要使用抽象工廠模式。

抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態。

抽象工廠模式與工廠方法模式最大的區別在於,工廠方法模式針對的是乙個產品等級結構,而抽象工廠模式則需要面對多個產品等級結構,乙個工廠等級結構可以負責多個不同產品等級結構中的產品物件的建立 。當乙個工廠等級結構可以建立出分屬於不同產品等級結構的乙個產品族中的所有物件時,抽象工廠模式比工廠方法模式更為簡單、有效率。

模式定義

抽象工廠模式(abstract factory pattern):提供乙個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類。抽象工廠模式又稱為kit模式。

模式優缺點

抽象工廠模式的優點

抽象工廠模式隔離了具體類的生成,使得客戶並不需要知道什麼被建立。由於這種隔離,更換乙個具體工廠就變得相對容易。所有的具體工廠都實現了抽象工廠中定義的那些公共介面,因此只需改變具體工廠的例項,就可以在某種程度上改變整個軟體系統的行為。另外,應用抽象工廠模式可以實現高內聚低耦合的設計目的,因此抽象工廠模式得到了廣泛的應用。

模式優缺點

抽象工廠模式的缺點

在新增新的產品物件時,難以擴充套件抽象工廠來生產新種類的產品,這是因為在抽象工廠角色中規定了所有可能被建立的產品集合,要支援新種類的產品就意味著要對該介面進行擴充套件,而這將涉及到對抽象工廠角色及其所有子類的修改,顯然會帶來較大的不便。

開閉原則的傾斜性(增加新的工廠和產品族容易,增加新的產品等級結構麻煩)

模式適用環境

在以下情況下可以使用抽象工廠模式:

乙個系統不應當依賴於產品類例項如何被建立、組合和表達的細節,這對於所有型別的工廠模式都是重要的。

系統中有多於乙個的產品族,而每次只使用其中某一產品族。

屬於同乙個產品族的產品將在一起使用,這一約束必須在系統的設計中體現出來。

系統提供乙個產品類的庫,所有的產品以同樣的介面出現,從而使客戶端不依賴於具體實現。

模式擴充套件

「開閉原則」的傾斜性

「開閉原則」要求系統對擴充套件開放,對修改封閉,通過擴充套件達到增強其功能的目的。對於涉及到多個產品族與多個產品等級結構的系統,其功能增強包括兩方面:

(1) 增加產品族:對於增加新的產品族,工廠方法模式很好的支援了「開閉原則」,對於新增加的產品族,只需要對應增加乙個新的具體工廠即可,對已有**無須做任何修改。

(2) 增加新的產品等級結構:對於增加新的產品等級結構,需要修改所有的工廠角色,包括抽象工廠類,在所有的工廠類中都需要增加生產新產品的方法,不能很好地支援「開閉原則」。

抽象工廠模式的這種性質稱為「開閉原則」的傾斜性,抽象工廠模式以一種傾斜的方式支援增加新的產品,它為新產品族的增加提供方便,但不能為新的產品等級結構的增加提供這樣的方便。

每日練習 1021

1.數據機 modem 的主要功能是 正確答案 c 實現ppp協議 串 並轉換 模擬訊號與數碼訊號的轉換 曼徹斯特編碼 2.網橋工作於 用於將兩個區域網連線在一起並按 mac 位址 幀。p102 正確答案 c 物理層網路層 資料鏈路層 傳輸層3.按頻率分割通道的方法叫 正確答案 a fdmtdm s...

12 10每日部落格

今天記錄一下我在使用layui元件中的 的時候遇到的問題,就是如何將mysql讀取到的資料顯示在 元件中的url指向的就可以是後台的servlet,然後servlet向前臺傳遞的是乙個json資料,並且要按照官網中的案例進行返回,不然前台的介面無法載入資料並且會提示介面異常。這裡的json是 net...

12 9每日部落格

首先給資料集名稱那一列 新增點選事件 然後呼叫乙個js方法,這個方法中包含layui元件中的彈出視窗的方法 function showthisdatatab name,size 然後我的思路是將這個資料集的名稱或者id傳遞給要開啟的那個html網頁,在那個網頁中在呼叫乙個資料 請求後台並得到資料庫的...