上篇博文寫了建立型模式中的(工廠家族)。這次來介紹一下結構型模式。主要從各個模式的含義,優缺點,適用場合及結構圖來了解結構型模式。
結構型模式包括有7種模式,介面卡模式,外觀模式,**模式,橋接模式,享元模式,組合模式,裝飾模式。每個模式各有優缺,孰優孰劣,請看下文。
定義:將乙個類的介面轉換成客戶希望的另外乙個介面。使得原本由於介面不相容而不能一起工作的那些類可以一起工作。
結構圖:
適用於:想要使用乙個已存在的類,但介面和你的要求不同時
在軟體開發後期或是維護時期,在雙方都不太容易修改時
優點:讓介面不同的類通過適配,協同工作。
定義:為系統中的一組介面提供乙個一致的介面,它定義乙個高層介面,使得這一子系統更加容易使用。
結構圖:
優點:對客戶遮蔽了子系統元件,使得使用者處理的物件數目減少,使系統用起來更容易。
實現了子系統與使用者之間的松耦合,
適用於:當要為複雜子系統提供乙個簡單介面時
將不同的兩個層分離,在層與層之間建立外觀
定義:為物件提供一種**以控制對這個物件的訪問。
結構圖:
優點:職責清晰,真實的角色就是實現實際業務邏輯,不用關心其他費本職責的事務,通過後期的**完成一件完成事務,結果就是變成簡潔清晰。
**物件可以在客戶端和目標物件之間起到中介作用。
高擴充套件性。
適用於:
遠端**:為乙個物件在不同位址空間提供區域性代表。
虛擬**:更具需要建立開銷很大的物件。
安全**:用來控制真實物件訪問時的許可權。
智慧型指引:當呼叫真實物件時,**處理另外一些事。
1.**vs外觀,**物件代表乙個單一物件而外觀物件代表乙個子系統。
2.**的客戶物件無法直接訪問目標物件。
外觀的客戶物件可直接訪問子系統中的各個物件。
3.**是一種原來物件的代表,其他需要與這個物件打交道的操作都和這個代表交涉。
介面卡不需要虛構乙個代表者,只需為應付特定使用目的,將原來的類進行一些組合。
4.外觀和適配都是對現有系統的封裝。外觀定義的是乙個新系統,適配是復用原有的介面。
定義;動態給物件新增一些額外的職責。就增加功能來說,裝飾模式相比生成子類更加靈活。
結構圖:
優點:裝飾模式與整合關係的目的都是要擴充套件物件的功能,但裝飾模式尅提供更多的靈活性,
通過使用不同的具體裝飾類以及這些裝飾類的排列組合,設計師可創造出很多不同的行為組合。
缺點: 比繼承更靈活的特性,也意味著增加了複雜性
使設計**現許多類,若過度使用,會使程式變得複雜。
這一點是在查詢時了解到的,也在這裡分享給大家:
1.關於新職責:介面卡也可以在轉換時增加新的職責,但主要目的不在此。裝飾者模式主要是給被裝飾者增加新職責的。
2.關於原介面:介面卡模式是用新介面來呼叫原介面,原介面對新系統是不可見或者說不可用的。裝飾者模式原封不動的使用原介面,系統對裝飾的物件也通過原介面來完成使用。(增加新介面的裝飾者模式可以認為是其變種--「半透明」裝飾者)
3.關於其包裹的物件:介面卡是知道被適配者的詳細情況的(就是那個類或那個介面)。裝飾者只知道其介面是什麼,至於其具體型別(是基類還是其他派生類)只有在執行期間才知道
定義:將抽象部分和實現部分分離,使得它們都可以獨立的變化。
結構圖:
過度使用繼承會導致類的結構過於複雜,難維護,擴充套件性差。通過解耦這些不同的變化,把繼承關係改為組合,使得兩者各自獨立變化(即合成聚合復用原則)。
定義:將物件組合成樹形結構以表示『部分—整體』的層次結構,組合模式使得使用者和組合物件的使用具有一致性。
結構圖:
定義:運用共享技術有效支援大量細粒度的物件。
結構圖:
使用共享物件,用來盡可能的減少記憶體使用量及分享資訊給盡可能多的相似物件。
它適用於只因為重複而導致使用無法令人接受的大量記憶體的大量物件。
設計模式階段,自我覺得對於模式的理解不好。看書看懂了,不代表真的理解了模式。學習繼續ing!
設計模式 結構型模式
介面卡模式 adapter pattern 橋接模式 bridge pattern 過濾器模式 filter criteria pattern 組合模式 composite pattern 裝飾器模式 decorator pattern 外觀模式 facade pattern 享元模式 flywei...
設計模式 結構型模式
proxy 模式 中介 介面卡 adapter 模式 轉換器 1.定義 將乙個類的介面轉換成客戶希望的另外乙個介面,使得原本由於介面不相容而不能一起工作的那些類能一起工作。2.優點 復用了現存的類 將目標類和適配者類解耦,解決了目標類和適配者類介面不一致的問題。3.缺點 更換介面卡的實現過程比較複雜...
設計模式 結構型模式
外觀模式 為子系統中的一組介面提供乙個一致的介面,外觀模式定義了乙個高層介面,這個介面使得這一系統更加容易使用。介面卡模式 將乙個類的介面轉換成客戶希望的另外乙個介面。它使得原本由於介面不相容而不能一起工作的那些類一起工作。橋接模式 將抽象部分與它的實現部分分離,使它們可以獨立地變化。組合模式 將物...