結構型模式描述了如何把類和物件組合起來以形成更大的結構。我是這麼理解的:程式大體框架已基本形成了,只是對其**和結構進行了優化。提高了**的復用性,降低了系統內部的耦合性。
該型別模式主要包括:介面卡模式、橋接模式、組合模式、裝飾模式、外觀模式、享元模式、**模式。
1.介面卡模式:更換介面,使其成為適應使用者需求的介面。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。(系統的資料和行為都是正確的,但介面不符時,我們應該考慮用介面卡,目的是使控制範圍之外的乙個原有物件與某個介面匹配。介面卡模式主要應用於希望復用一些現存的類,但是介面又與復用環境要求不一致的情況。)當使用乙個已經存在的類,但如果它的介面也就是它的方法和你的要求不同時,就應該考慮使用介面卡模式。客戶**可以統一呼叫同一介面。
現實生活中這樣的例子很多,前段時間買了個鍵盤,由於自己的疏忽把鍵盤買錯了,應該是usb介面的,我卻買成了台式電腦的圓頭的,跟賣家交談的時候,人家推薦我用usb轉換器就可以解決問題啦。一樣的道理,介面卡模式就是要解決這個問題,就算是轉彎抹角也要達到目的。
2.橋接模式:
將抽象部分和它的實現部分分離,使它們都可以獨立的變化。(抽象類和它的派生類用來實現自己的物件)我的理解是:實現系統可能有多角度分類,每一種分類都有可能變化,那麼就把這多角度分離出來讓他們變化,減少他們之間的耦合。
這裡用到了合成/聚合復用原則(盡量使用合成/聚合,盡量不要使用類的繼承:優先使用物件的合成/聚合將有助於你保持每個類被封裝,並被集中在單個任務上。這樣類和繼承層次會保持較小規模,並且不可能增長為不可控制的龐然大物。)
說實話,剛開始不太理解什麼是抽象和實現分離,從網上找了乙個例子說服了自己:就拿汽車在路上行駛的來說。即有小汽車又有公共汽車,它們都不但能在市區中的公路上行駛,也能在高速公路上行駛。這你會發現,對於交通工具(汽車)有不同的型別,然而它們所行駛的環境(路)也在變化,在軟體系統中就要適應兩個方面的變化?怎樣實現才能應對這種變化呢?
在軟體系統中,某些型別由於自身的邏輯,它具有兩個或多個維度的變化,那麼如何應對這種「多維度的變化」?如何利用物件導向的技術來使得該型別能夠輕鬆的沿著多個方向進行變化,而又不引入額外的複雜度?這就要使用bridge模式。
3.組合模式:
定義:組合模式是將物件組合成樹形結構以表示『部分-整體』的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。當
需求中是體現部分與整體層次的結構時,希望使用者可以忽略組合物件與單個物件的不同,統一地使用組合結構中的所有物件時,就應該考慮用組合模式了。
它定義了包含基本物件、組合物件的類的層次結構。基本物件可以被組合成更複雜的組合物件,而這個組合物件又被組合,這樣不斷地遞迴下去,客戶**中,任何用到基本物件的地方都可以使用組合物件了、
使用者是不用關心到底是處理乙個葉節點海華絲處理乙個組合元件,也就用不著為定義組合而寫一些判斷語句了。組合模式是讓客戶可以一致地使用組合結構和單個物件。(詳見
4.裝飾模式:
動態的給乙個物件新增額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。
5.外觀模式:
為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這乙個子系統更加容易使用。
**模式:
為其他物件提供一種**以控制對這個物件的訪問
二者區別:
**的客戶物件無法直接訪問目標物件,**物件提供對單獨目標物件的訪問控制,而外觀模式的客戶物件可以直接訪問子系統中的各個物件,但通常由外觀物件提供對子系統個元件功能的簡化的共同層次的呼叫介面。
6.享元模式:運用共享技術有效的支援大量細粒度的物件
總結:概念性的東西,越想越亂,在回憶這幾個模式的時候,都是首先想到的是大話設計上大鳥和小菜對話的場景,之後才是對知識的回顧,還是理論和實際脫節的緣故啊。所以嘛,重複才是力量,將設計模式與實踐相結合,慢慢感悟。
設計模式 結構型模式
介面卡模式 adapter pattern 橋接模式 bridge pattern 過濾器模式 filter criteria pattern 組合模式 composite pattern 裝飾器模式 decorator pattern 外觀模式 facade pattern 享元模式 flywei...
設計模式 結構型模式
proxy 模式 中介 介面卡 adapter 模式 轉換器 1.定義 將乙個類的介面轉換成客戶希望的另外乙個介面,使得原本由於介面不相容而不能一起工作的那些類能一起工作。2.優點 復用了現存的類 將目標類和適配者類解耦,解決了目標類和適配者類介面不一致的問題。3.缺點 更換介面卡的實現過程比較複雜...
設計模式 結構型模式
外觀模式 為子系統中的一組介面提供乙個一致的介面,外觀模式定義了乙個高層介面,這個介面使得這一系統更加容易使用。介面卡模式 將乙個類的介面轉換成客戶希望的另外乙個介面。它使得原本由於介面不相容而不能一起工作的那些類一起工作。橋接模式 將抽象部分與它的實現部分分離,使它們可以獨立地變化。組合模式 將物...