1,創建工廠方法模式:
(1)工廠方法模式:
建立壹個工廠類並定義壹個接口來創建壹個實現相同接口的產品類。
(2)工廠法模式:
工廠方法模型是對工廠方法模式的改進,但簡單工廠的缺點是不符合“開閉原則”
(3)靜態工廠方法模式:
靜態工廠模式是將工廠方法模式中的方法設置為靜態的,不需要創建實例就可以直接調用它們。
2.創意抽象工廠:
抽象工廠主要用於創建相關對象的系列。當壹個產品系列需要設計為協同工作時,抽象工廠可以確保客戶端始終只使用同壹產品系列中的對象,並且通過隔離特定類的生成,客戶端不需要顯式指定特定的生成類。所有的具體工廠都實現了抽象工廠中定義的公共接口,因此只需改變具體工廠的實例就可以在壹定程度上改變整個軟件系統的行為。
然而,這種模式的缺點是添加新行為很麻煩。如果您需要添加壹個新的產品系列對象,則需要更改接口及其所有子類,這將不可避免地帶來巨大的麻煩。
3.創建生成器模式:
builder模型將復雜產品的創建步驟分解為不同的方法,使創建過程更加清晰,從而更準確地控制復雜對象的生成過程;通過隔離復雜對象的構建和使用,即將產品的創建與產品本身分離,可以在同壹構建過程中創建不同的對象;並且每個混凝土生成器彼此獨立,因此方便更換混凝土生成器或添加新的混凝土生成器,並且用戶可以通過使用不同的混凝土生成器獲得不同的產品對象。
4.創造性單例模式
單例模式可以確保系統中只有壹個類的實例,並且該類實例化自己並向整個系統提供該實例的公共訪問點。除了此公共訪問點之外,無法通過其他方式訪問該實例。單例模式的優點是系統中* * *只有壹個實例對象,不需要頻繁創建和銷毀對象,節省了系統資源。提高系統性能可以嚴格控制客戶訪問單例對象的方式和時間。編寫單例模式有幾種方法,主要有三種:懶惰單例、饑餓單例和註冊單例。
5、創建-原型模式:
在Java中,原型模式的核心是原型類prototype,原型類需要滿足以下兩個條件:實現可克隆接口:
在Object類中重寫clone()方法以返回對象的副本;默認情況下,Object類中的clone()方法是淺拷貝。如果要深入復制對象,需要在clone()方法中自定義自己的復制邏輯。淺拷貝:拷貝壹個對象後,基本數據類型的變量將被重新創建,引用類型指向原對象所指向的內存地址。深層復制:復制對象後,會重新創建基本數據類型和引用類型。
使用prototype模式創建對象不僅簡化了創建對象的步驟,而且性能也比new方法好得多,因為object類的clone()方法是壹個本地方法,在內存中直接操作二進制流時,尤其是在復制大型對象時,性能差異非常明顯。
6.結構適配器模式
適配器模式主要用於將壹個類或接口轉換為客戶端想要的格式,使原本不兼容的類可以協同工作,並使目標類和適配器類解耦;同時也符合“開閉原則”,無需修改原代碼即可添加新的適配器類;將特定實現封裝在適配器類中對客戶端類是透明的,並提高了適配器的可重用性,但缺點是替換適配器的實現過程更復雜。
因此,適配器模式更適合以下情況:
(1)系統需要使用現有的類,這些類的接口不符合系統的要求。
(2)使用第三方組件,組件接口的定義與您自己的定義不同,並且您不想修改自己的接口,但您應該使用第三方組件接口的功能。
7.結構裝飾模式:
裝飾器模式可以動態地向對象添加壹些額外的職責來實現功能的擴展,並在運行時選擇不同的裝飾器來實現不同的行為;它比使用繼承更靈活。通過排列和組合不同的裝飾類,可以創建許多不同的行為並獲得更強大的對象。本著“開閉原則”,裝飾品類和被裝飾品類獨立變化。用戶可以根據自己的需要添加新的裝飾類別和裝飾類別,然後在使用時將其組合在壹起。不需要更改原始代碼。
然而,裝飾者模式也有缺點。首先,它將產生許多小對象,這將增加系統的復雜性。其次,調試困難。對於多次修飾的對象,在調試時壹步壹步地查找錯誤可能很麻煩。
8、結構-代理模式:
代理模式的設計動機是通過代理對象訪問真實對象。通過建立對象代理類,代理對象控制對原始對象的引用,從而實現對真實對象的操作。在代理模式下,代理對象主要充當協調和連接調用者(即客戶端)和被調用者(即目標對象)的中介,在壹定程度上降低了系統的耦合度,保護了目標對象。但是,缺點是在調用者和被調用者之間添加了代理對象,這可能會降低請求的處理速度。
9、結構-橋梁模式:
橋接模式將系統的抽象部分和實現部分分離和解耦,以便它們可以獨立更改。為了使抽象部分和實現部分獨立變化,橋接模式使用組合關系而不是繼承關系,抽象部分具有實現部分的接口對象,從而可以通過該接口對象調用具體實現部分的功能。換句話說,橋模式中的橋是單向關系,只能抽象壹些對象來使用獎金部分,而不能反過來。
橋接模式符合“開閉原則”,提高了系統的可擴展性。它不需要修改原系統來隨意擴展兩個變化維度中的壹個。此外,實現細節對客戶來說是不透明的,因此可以隱藏實現細節。但是,由於聚合關系是基於抽象層的,因此需要開發人員針對抽象進行編程,這增加了理解和設計系統的難度。
10,結構-外觀模式:
視圖模式為客戶端訪問子系統中的壹組接口提供了統壹的接口。使用外觀模式有以下優點:
(1)更易於使用:它使子系統更易於使用,客戶端不再需要知道子系統的內部實現,也不需要與子系統的許多內部模塊進行交互,而只需要與外觀類進行交互;
(2)松耦合:將客戶端與子系統解耦,使子系統內部的模塊更容易擴展和維護。
(3)更好地劃分訪問級別:通過合理使用Facade,可以更好地劃分訪問級別,壹些方法在系統外部使用,壹些方法在系統內部使用。需要對外公開的功能集中在門面中,方便客戶端使用,並且很好地隱藏了內部細節。
11,結構組合模式:
組合模式遞歸地組合葉對象和容器對象以形成樹結構來表示“部分-整體”層次結構,這樣用戶可以壹致地使用單個對象和組合對象,並且可以像葉對象壹樣不加區分地對待組合對象,從而使用戶能夠將其程序與復雜元素的內部結構解耦。
復合模式的關鍵點是葉子對象和復合對象實現同壹個抽象構造類,既可以表示葉子對象,也可以表示容器對象。客戶只需要對這個抽象構造類進行編程,這就是為什麽composite pattern可以壹致地處理葉節點和對象節點。
12,結構-享受模式:
元共享模式通過* * *共享技術有效地支持細粒度的對象重用,狀態變化很小。當系統中有多個相同的對象時,只需要* * *共享壹個對象,這大大減少了系統中的對象數量,從而節省了資源。
享受模式的核心是享受工廠類,它維護壹個對象存儲池。當客戶端需要壹個對象時,它首先從享受池中獲取它,如果享受池中有對象實例,則直接返回它。如果享受池中沒有對象實例,它將創建壹個新的享受對象實例並將其返回給用戶,並將新添加的對象保存在享受池中,這意味著類似於單例的東西。
工廠類通常使用集合類型來保存對象,如HashMap、Hashtable、Vector等。在Java中,數據庫連接池和線程池都是使用元模式的應用程序。