“對象創(chuàng)建”模式:
通過“對象創(chuàng)建”模式繞開new,來避免對象創(chuàng)建(new)過程中所導(dǎo)致的緊耦合(依賴具體類),從而支持對象創(chuàng)建的穩(wěn)定。它是接口抽象之后的第一步工作。
典型模式:
Factory Method
Abstract Factory
Prototype
Builder
Factory Method工廠方法:
定義:定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類,F(xiàn)actory Method使得一個類的實例化延遲(目的:解耦 ;手段:虛函數(shù))到子類
動機:繞開需求的變化而使抽象的變化。
要點:通過Factory Method方法將修改轉(zhuǎn)為擴展的策略,將緊耦合的關(guān)系變?yōu)樗神詈系年P(guān)系。
Abstract Factory抽象工廠:
動機:在軟件系統(tǒng)中常常面臨著相互依賴的關(guān)系。提供一種“封裝機制”來避免多系列具體對象創(chuàng)建工作的緊耦合。
定義:提供一個接口,讓該接口負(fù)責(zé)創(chuàng)建一系列“相關(guān)或者互相依賴的對象”,無需指定它們具體的類。
總結(jié):在應(yīng)對“多系列對象構(gòu)建”的需求變化的時候使用Abstract Factory。
Prototype原型模式:
向客戶程序(抽象)隔離出“易變的程序”(實現(xiàn)),從而使得“依賴這些易變對象的客戶程序”不隨需求的改變而改變。
定義:使用原型實例指定創(chuàng)建對象的種類,然后通過拷貝這些原型來創(chuàng)建新的對象。
總結(jié):同樣用于隔離類對象的使用者和具體類型之間的關(guān)系。要求這些易變類擁有“穩(wěn)定的接口”
Builder構(gòu)建器:
動機:在軟件系統(tǒng)中,有時面臨著“一個復(fù)雜對象”的創(chuàng)建工作,其通常由各個部分的子對象用一定的算法構(gòu)成。但由于需求的變化,這個復(fù)雜的對象的各個部分經(jīng)常面臨著劇烈的變化,但是將他們組合在一起的算法相對穩(wěn)定。
定義:將一個復(fù)雜對象的創(chuàng)建與其表示相分離,使得同樣的構(gòu)建過程(穩(wěn)定)可以創(chuàng)建不同的表示(變化)
總結(jié):主要用于“分步驟構(gòu)建一個復(fù)雜的對象”。在這其中“分步驟”是一個穩(wěn)定的算法,而復(fù)雜對象的各個部分則經(jīng)常變化。
"接口隔離"模式:
在組件構(gòu)建過程中,某些接口直接的依賴常常會帶來許多問題,甚至根本無法實現(xiàn)。采用添加一層間接(穩(wěn)定)接口,來隔離本來互相緊密關(guān)聯(lián)的接口是一種常見方案。
典型模式:
Facade
Proxy
Adapter
Mediator
Facade門面模式:
動機:客戶組件和子系統(tǒng)之間耦合過度
定義:為子系統(tǒng)中的一組接口提供一個一致(穩(wěn)定)的界面,F(xiàn)acade模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用(復(fù)用)。
總結(jié):簡化了組件系統(tǒng)的接口,達到了解耦的效果。
Mediator:中介者
動機:軟件構(gòu)建過程中,經(jīng)常出現(xiàn)多個對象互相關(guān)聯(lián)交互的情況,對象之間常常會維持一種復(fù)雜的引用關(guān)系,如果遇到一些需求更改,這種直接引用關(guān)系將面臨不斷的變化。所以可以使用”中介對象“管理對象間的關(guān)聯(lián)關(guān)系。
很像Facade模式。
定義:用一個中介對象來封裝(封裝變化)一系列的對象交互。中介者使各對象不需要顯式的相互引用(編譯時依賴-》運行時依賴),從而使其耦合松散(管理變化),而且可以獨立地改變它們之間的交互。
總結(jié):使用中介解耦,抵御了可能的變化。