1.Factory Method工廠方法
在軟件系統(tǒng)的設(shè)計(jì)中亿汞,創(chuàng)建對(duì)象往往與客戶需求的變化緊密的耦合在一起亮垫,降低了代碼的靈活性羔沙。為了消除這種緊密的耦合關(guān)系躺涝,我們把創(chuàng)建對(duì)象這一工作封裝起來,使得創(chuàng)建具體對(duì)象的時(shí)間延遲到程序的運(yùn)行當(dāng)中去扼雏。從而打到代碼的靈活性和復(fù)用性坚嗜。
個(gè)人看法:工廠模式就是將類對(duì)象的使用者和具體類的關(guān)系變得松散,避免new對(duì)象所帶來的綁定關(guān)系诗充。
2.Abstract Factory 抽象工廠
由于一系列相關(guān)對(duì)象之間存在聯(lián)系苍蔬,于是就通過一個(gè)接口來創(chuàng)建他們,不需要具體對(duì)象蝴蜓。
通過一個(gè)接口來創(chuàng)建多個(gè)相關(guān)對(duì)象碟绑,即保證了相關(guān)對(duì)象的一致性俺猿,又使得耦合變得松散。
3.Protoype 原型模式
一些對(duì)象的創(chuàng)建過程過于復(fù)雜格仲,于是可以使用原型實(shí)例押袍,通過拷貝這個(gè)原型實(shí)例來創(chuàng)建對(duì)象。
對(duì)象創(chuàng)建通過創(chuàng)建Prototype基類的接口凯肋,從而調(diào)用具體類的Clone()函數(shù)谊惭,實(shí)現(xiàn)對(duì)象創(chuàng)建。
4. Builder 構(gòu)建器
在軟件系統(tǒng)中侮东,有時(shí)候面臨著“一個(gè)復(fù)雜對(duì)象”的創(chuàng)建工作圈盔,其通常由各個(gè)部分的子對(duì)象用一定的算法構(gòu)成;由于需求的變化苗桂,這個(gè)復(fù)雜對(duì)象的各個(gè)部分經(jīng)常面臨著劇烈的變化药磺,但是將它們組合在一起的算法卻相對(duì)穩(wěn)定。
如何應(yīng)對(duì)這種變化煤伟?如何提供一種“封裝機(jī)制”來隔離出“復(fù)雜對(duì)象的各個(gè)部分”的變化癌佩,從而保持系統(tǒng)中的“穩(wěn)定構(gòu)建算法”不隨著需求改變而改變?
將一個(gè)復(fù)雜對(duì)象的構(gòu)建與其表示相分離便锨,使得同樣的構(gòu)建過程(穩(wěn)定)可以創(chuàng)建不同的表示(變化)围辙。
Builder模式主要用于“分步驟構(gòu)建一個(gè)復(fù)雜的對(duì)象”。在這其中“分步驟”是一個(gè)穩(wěn)定的算法放案,而復(fù)雜對(duì)象的各個(gè)部分則經(jīng)常變化姚建。
變化點(diǎn)在哪里,封裝哪里——Builder模式主要在于應(yīng)對(duì)“復(fù)雜對(duì)象各個(gè)部分”的頻繁需求變動(dòng)。其缺點(diǎn)在于難以應(yīng)對(duì)“分步驟構(gòu)建算法”的需求變動(dòng)据忘。
在Builder模式中扣泊,要注意不同語言中構(gòu)造器內(nèi)調(diào)用虛函數(shù)的差別。
5.門面模式
為子系統(tǒng)中的一組接口提供一個(gè)一致(穩(wěn)定)的界面稿湿,門面模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用(復(fù)用)押赊。
從客戶程序的角度來看饺藤,門面模式簡(jiǎn)化了整個(gè)組件系統(tǒng)的接口,對(duì)于組件內(nèi)部與外部客戶程序來說流礁,打到了一種“解耦”的效果——內(nèi)部子系統(tǒng)的任何變化不會(huì)影響到門面接口的變化涕俗。
門面設(shè)計(jì)模式更注重從構(gòu)架的層次去看整個(gè)系統(tǒng),而不是單個(gè)類的層次神帅。門面模式很多時(shí)候更是一種架構(gòu)設(shè)計(jì)模式再姑。
門面設(shè)計(jì)模式并非一個(gè)集裝箱,可以任意地放進(jìn)任何多個(gè)對(duì)象找御。門面模式中組件的內(nèi)部應(yīng)該是“相互耦合關(guān)系比較大的一系列組件”询刹,而不是一個(gè)簡(jiǎn)單的功能集合谜嫉。
6.Mediator中介者
用一個(gè)中介對(duì)象來封裝(封裝變化)一系列的對(duì)象交互。中介者使各對(duì)象不需要顯示的相互引用(編譯時(shí)依賴—>運(yùn)行時(shí)依賴)凹联,從而使其耦合松散(管理變化)沐兰,而且可以獨(dú)立地改變它們之間的交互。
將多個(gè)對(duì)象間復(fù)雜的關(guān)聯(lián)關(guān)系解耦蔽挠,中介者模式將多個(gè)對(duì)象間的控制邏輯進(jìn)行集中管理住闯,變“多個(gè)對(duì)象互相關(guān)聯(lián)” 為“多個(gè)對(duì)象和一個(gè)中介者關(guān)聯(lián)”,簡(jiǎn)化了系統(tǒng)的維護(hù)澳淑,抵御了可能的變化比原。
隨著控制邏輯的復(fù)雜化,中介者模式具體對(duì)象的實(shí)現(xiàn)可能相當(dāng)復(fù)雜杠巡。這時(shí)候可以對(duì)中間者模式對(duì)象進(jìn)行分解處理量窘。
門面模式是解耦系統(tǒng)間(單向)的對(duì)象關(guān)聯(lián)關(guān)系;中間者模式是解耦系統(tǒng)內(nèi)各個(gè)對(duì)象之間的關(guān)聯(lián)關(guān)系氢拥。