8.工廠方法
對象創(chuàng)建模式
-通過對象創(chuàng)建模式來避免new過程中導(dǎo)致的緊耦合
-factory method
-abstract factory
-prototype
-builder
factory method 工廠方法
動(dòng)機(jī)motivation
-創(chuàng)建對象的工作中,需要?jiǎng)?chuàng)建的對象因需求不同而不同
-繞過常規(guī)對象創(chuàng)建方法new,提供一種封裝機(jī)制避免具體對象創(chuàng)建帶來的緊耦合
模式定義
-定義一個(gè)用于創(chuàng)建對象的接口,讓子類決定實(shí)例化的具體類
-將類的實(shí)例化延遲到子類,解耦合,通常用虛函數(shù)

要點(diǎn)
-用來隔離類對象的使用者和具體類型之間的耦合關(guān)系,解決new導(dǎo)致的緊耦合關(guān)系
-將所要?jiǎng)?chuàng)建的具體對象工作延遲到子類,從而實(shí)現(xiàn)一種擴(kuò)展而非更改的策略
-解決單個(gè)對象的需求變化,
-缺點(diǎn)在于要求創(chuàng)建方法/參數(shù)相同
一個(gè)對象的類型往往聲明成抽象的類或者接口,而不是具體的類
實(shí)現(xiàn)面向接口的編程體現(xiàn)了依賴抽象原則
9.抽象工廠
abstract factory 抽象工程
動(dòng)機(jī)motivation
-一系列相互依賴的對象的創(chuàng)建,在需求變化時(shí)
-繞過唱歌對象創(chuàng)建方法new,封裝多系列具體對象創(chuàng)建工作,避免緊耦合
模式定義
-提供一個(gè)借口,負(fù)責(zé)創(chuàng)建一系列相關(guān)或者相互依賴的對象,無需指定他們的具體類

要點(diǎn)
-沒有多系列對象構(gòu)建,使用簡單工廠即可
-系列對象是指特定系列下的對象之間有相互依賴或作用的關(guān)系,不同系列對象之間不能相互依賴
-abstract factory用于應(yīng)對新系列需求變動(dòng)
-缺點(diǎn)難以應(yīng)對新對象的需求變動(dòng)
10. 原型模式
prototype原型模式
-屬于對象創(chuàng)建模式的一種
動(dòng)機(jī)motivation
-結(jié)構(gòu)復(fù)雜的對象的創(chuàng)建工作,需求變化使對象結(jié)構(gòu)變化,但接口一致
-向可好程序隔離出一遍對象,使得依賴易變對象的客戶程序不隨需求改變而改變
模式定義
-通過拷貝原型來創(chuàng)建新的對象

要點(diǎn)
-用于隔離類對象的使用者和具體易變類型之間的耦合關(guān)系,要求易變類型擁有穩(wěn)定的接口
-創(chuàng)建易變類的尸體對象時(shí)采用原型克隆的方法,靈活動(dòng)態(tài)創(chuàng)建擁有穩(wěn)定接口的新對象
-需要注冊一個(gè)新類的對象原型,然后在需要的地方clone
-clone方法可以用框架中的序列化來實(shí)現(xiàn)深拷貝
11. 構(gòu)建器
builder構(gòu)建器
動(dòng)機(jī)motivation
-復(fù)雜對象的創(chuàng)建中各個(gè)部分自對象用一定的算法構(gòu)成,需求變化使復(fù)雜對象各個(gè)部分發(fā)生變化,但他們組合的算法相對穩(wěn)定
-提供封裝來隔離復(fù)雜對象的各個(gè)部分,保持系統(tǒng)中穩(wěn)定的構(gòu)建算法不隨需求改變而改變
模式定義
-將一個(gè)復(fù)雜對象的構(gòu)建與其表示相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示

要點(diǎn)
-分步驟構(gòu)建復(fù)雜對象,其中分步驟是穩(wěn)定的算法,復(fù)雜對象各個(gè)部分變化頻繁
-變化點(diǎn)和封裝點(diǎn)
-應(yīng)對復(fù)雜對象各個(gè)部分的頻繁變動(dòng)需求
-缺點(diǎn)難以應(yīng)對分步驟構(gòu)建算法的變動(dòng)
-注意不同語言中構(gòu)造器內(nèi)調(diào)用虛函數(shù)的差別
12.門面模式
接口隔離模式
-組件構(gòu)建過程中接口之間的依賴需要被隔離
-facade
-proxy
-adapter
-mediator
facade門面模式
動(dòng)機(jī)motivation
-客戶和組件中關(guān)系比較復(fù)雜,耦合過多
-簡化外部客戶程序和系統(tǒng)間的交互接口,將外部客戶程序的演化和內(nèi)部子系統(tǒng)的變化之間的依賴解耦合
模式定義
-為子系統(tǒng)的一組接口提供一個(gè)一致穩(wěn)定的界面,定義一個(gè)高級接口,使子系統(tǒng)更加容易使用

要點(diǎn)
-簡化了整個(gè)組件系統(tǒng)的接口
-內(nèi)部子系統(tǒng)的任何變化不會(huì)影響到facade接口變化
-注重從框架的層次看待整個(gè)系統(tǒng),一種構(gòu)架
-組件內(nèi)部是相互耦合關(guān)系比較大的一系列組件
13.代理模式
proxy代理模式
動(dòng)機(jī)motivation
-對象創(chuàng)建開銷大、操作需要安全控制、需要進(jìn)程外訪問
-在不失去透明操作對象的同時(shí)來管理和控制這些對象特有的復(fù)雜性,增加一層間接層
模式定義
-為其他對象提供一種代理以控制、隔離、使用接口訪問對象

要點(diǎn)
-增加一層間接層
-不一定要求保持接口完整的一致性,能夠?qū)崿F(xiàn)間接控制,損失一定透明性
14.適配器
adapter適配器
動(dòng)機(jī)motivation
-需要將現(xiàn)存的對象放在新的環(huán)境中應(yīng)用,但新環(huán)境要求的接口不同
-應(yīng)對遷移的變化,既能利用現(xiàn)有對象的良好實(shí)現(xiàn),又能滿足新應(yīng)用環(huán)境所要求的接口
模式定義
-將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另一個(gè)類的接口,使原本由于接口不兼容而不能一起工作的類可以一起工作

要點(diǎn)
-應(yīng)用于希望復(fù)用一些現(xiàn)存的類,但接口與環(huán)境要求不一致
-在遺留代碼復(fù)用、類庫遷移時(shí)有用
-對象適配器和類適配器
-類適配器采用多繼承實(shí)現(xiàn)方式,不推薦使用
-對象適配器采用對象組合方式
15.中介者
mediator中介者
動(dòng)機(jī)motivation
-多個(gè)對象互相關(guān)聯(lián)交互,對象之間維持復(fù)雜的引用關(guān)系,需求更改引起變化
-使用一個(gè)中介對象管理對象間關(guān)聯(lián)關(guān)系,避免相互交互的對象之間的緊耦合引用關(guān)系
模式定義
-用一個(gè)中介對象來封裝一系列對象交互,中介者使各對象不需要顯式的相互引用,編譯時(shí)依賴到運(yùn)行時(shí)依賴,松散耦合關(guān)系,可以獨(dú)立改變交互關(guān)系

要點(diǎn)
-將多個(gè)對象間復(fù)雜的關(guān)聯(lián)關(guān)系解耦合,集中管理多個(gè)對象間的控制邏輯
-變多個(gè)對象互相關(guān)聯(lián),為多個(gè)對象和一個(gè)中介者關(guān)聯(lián)
-facade是解耦合系統(tǒng)間單向?qū)ο箨P(guān)聯(lián)關(guān)系
-mediator是解耦合系統(tǒng)內(nèi)各個(gè)對象之間雙向的關(guān)聯(lián)關(guān)系
.