對象創(chuàng)建模式
● 目標(biāo):繞開new具體對象轩拨,避免對象創(chuàng)建過程中導(dǎo)致的緊耦合,從而支持對象創(chuàng)建的穩(wěn)定
● 典型模式:
○ Factorary method
○ Abstract method
○ Prototype
○ Builder
工廠模式
- 定義一個用于創(chuàng)建對象的接口院喜,讓子類決定實(shí)例化哪一個類
- 將創(chuàng)建工作延遲到子類中后亡蓉,核心工廠類不再負(fù)責(zé)產(chǎn)品的創(chuàng)建,這樣核心類成為一個抽象工廠喷舀,只提供工廠子類必須實(shí)現(xiàn)的接口砍濒,這樣的好處是可以不用修改已有的工廠類的情況下增加新的產(chǎn)品(每一種產(chǎn)品,都分別對應(yīng)相應(yīng)的工廠子類負(fù)責(zé)其創(chuàng)建工作)
-
類圖如下
抽象工廠模式
- 提供一個接口元咙,讓接口負(fù)責(zé)創(chuàng)建一系列“相關(guān)或相互依賴的對象”梯影,無需指定它們具體的類
- 與工廠模式的聯(lián)系
○ 抽象工廠模式是為創(chuàng)建一組(有多類)相關(guān)或依賴的對象提供創(chuàng)建接口,工廠模式是為一類對象提供創(chuàng)建接口或延遲對象的創(chuàng)建到子類中實(shí)現(xiàn)庶香。
○ 抽象工廠模式中的單個對象一般借助Factory模式實(shí)現(xiàn) - 類圖
Prototype模式
- 使用原型實(shí)例指定創(chuàng)建對象的種類甲棍,然后通過拷貝這些原型來創(chuàng)建新的對象
- 原型模式提供了通過已存在對象創(chuàng)建新的對象的接口,C++中該接口通過拷貝構(gòu)造函數(shù)實(shí)現(xiàn)
- 一般而言:需要創(chuàng)建具有復(fù)雜狀態(tài)的對象赶掖,采用原型模式
- 原型模式中的Clone方法可以利用某些框架中的序列化來實(shí)現(xiàn)深拷貝
- 類圖
Builder模式
- 將一個復(fù)雜對象的構(gòu)建與表示相分離感猛,使得同樣的構(gòu)建過程(穩(wěn)定)可以創(chuàng)建不同的表示(變化)
- 主要用于“分步驟構(gòu)建一個復(fù)雜的對象”,分步驟是穩(wěn)定的算法奢赂,復(fù)雜對象各個部分是變化的
- 與抽象工廠模式的區(qū)別
○ 強(qiáng)調(diào)分步創(chuàng)建對象陪白,相同的創(chuàng)建過程可以獲得不同的結(jié)果對象
○ 抽象工廠模式強(qiáng)調(diào)聚合多個相互關(guān)聯(lián)的對象,提供同一接口 - 類圖
隔離接口模式
- 在組件構(gòu)建過程中膳灶,某些接口之間直接的依賴帶來很多問題咱士。采用添加一層間接(穩(wěn)定)接口立由,來隔離相互緊密關(guān)聯(lián)的接口是常見的解決方案。
- 典型模式
○ 門面模式
○ 代理模式
○ 適配模式
○ Mediator模式
門面模式
- 為子系統(tǒng)中的一組接口提供一個穩(wěn)定的界面序厉,即定義了一個高層接口锐膜,這個接口使得子系統(tǒng)更加容易復(fù)用
- 從客戶程序的角度看,門面模式簡化了整個組件系統(tǒng)的接口弛房,對于系統(tǒng)內(nèi)部和外面客戶程序來說達(dá)到了解耦的效果
- 更注重從架構(gòu)層次去看整個系統(tǒng)道盏,而不是單個類的層次
- 門面模式的組件內(nèi)部應(yīng)該是“相互耦合關(guān)系比較大的一系列組件”,而不是一個簡單功能的集合
代理模式
- 為其他對象提供一種代理以控制(隔離)堆這個對象的訪問
- “增加一層間接層”是軟件系統(tǒng)中許多復(fù)雜問題的解決方法文捶。在面向?qū)ο笙到y(tǒng)中荷逞,直接使用某些對象會帶來很多問題,加入proxy間接層可以解決這類問題
- 具體proxy設(shè)計(jì)模式的實(shí)現(xiàn)方法和實(shí)現(xiàn)粒度相差很大粹排,在程序設(shè)計(jì)的不同層次都有涉及种远。(雖然形式不同辣卒,解決問題的思想一致)
- 類圖
適配模式
- 將一個類的接口轉(zhuǎn)換成客戶希望的另一個接口瞭亮,使得原本由于接口不兼容而不能一起工作的類可以一起工作
- 系統(tǒng)的數(shù)據(jù)和行為都正確,但接口不符時(shí),應(yīng)該考慮使用適配器斧抱,目的是使控制范圍之外的一個原有對象與某個接口匹配。適配器模式主要應(yīng)用于希望復(fù)用一些現(xiàn)存的類渐溶,但是接口又與復(fù)用環(huán)境要求不一致的情況辉浦。
- 想使用一個已經(jīng)存在的類,但如果它的接口和要求不相同時(shí)茎辐,應(yīng)該考慮用適配器模式宪郊。
- 兩種Adapter模式的實(shí)現(xiàn)結(jié)構(gòu)
○ 對象適配器:采用組合方案,推薦使用
○ 類適配器:采用多繼承的方案拖陆,不推薦使用 - 類圖
Mediator模式
- 用一個中介對象來封裝一系列的對象交互弛槐。中介者模式使各個對象不需要顯示的相互引用,從而使其耦合松散依啰,而且可以獨(dú)立的改變他們之間的交互
- 將多個對象間的復(fù)雜關(guān)聯(lián)關(guān)系解耦乎串,將多個對象間的控制邏輯集中管理,變多個對象互聯(lián)為多個對象和一個中介者關(guān)聯(lián)
- 隨著控制邏輯的復(fù)雜化速警,Mediator的實(shí)現(xiàn)會變得相當(dāng)復(fù)雜
- 門面模式是解耦系統(tǒng)間的單向關(guān)聯(lián)關(guān)系叹誉,中介者模式解耦系統(tǒng)中各個對象間的雙向關(guān)聯(lián)關(guān)系
- 類圖