結構型模式討論的是類和對象的結構,它採用繼承機制來組合介面或實現(類結構型模式),或者通過組合一些對象,從而實現新的功能(對象結構型模式)。GoF23中設計模式中結構型模式有7中。具體分類如下:
將一個介面轉換成客戶希望的另一個介面,適配器模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作(即讓介面不同的類通過適配器後,協同工作)。
將抽象部分與它的實現部分分離,使他們都可以獨立地變化。
在解耦方式中,用彙總來代替繼承。繼承雖然是好東西,但是過渡運用,就會導致類的結構過於複雜,關係太多,難以維護,而更糟糕的是擴充性非常差。如果發現繼承體系中,有兩個甚至多個方面的變化,那麼久解耦這些不同方向的變化,通過對象組合的方式,把兩個角色之間的繼承關係改為了組合的關係,從而使這兩者可以各自獨立的變化。找出變化並封裝之。
將對象組合成樹形結構以表示‘部分-整體’的階層,組合模式使得使用者對單個對象和組合對象的使用具有一致性。
動態給一個對象添加一些額外的職責。就增加功能來說,裝飾模式相比產生子類更加靈活。
面對變化,如果採用繼承方式會產生大量的子類,使子類數目呈爆炸性增長。而事實上,這些子類多半隻是為某個對象增加一些職責,此時通過裝飾的方式,可以更加靈活、以動態、透明的方式給單個對象添加職責,不需要時,撤銷相應的職責。
為子系統中的一組介面提供一個一致的介面,面板模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。
資訊的隱藏促進了軟體的複用,在面板模式中,採用引入一個外觀對象,讓一個軟體中的子系統見的通訊和相互依賴關係達到最小,也就為子系統間提供了一個單一而簡單的屏障。
運用共用技術有效地支援大量細粒度的對象。
為其他對象提供一種代理以控制對這個對象的訪問。
代理對象代表一個單一對象而外觀對象代表一個子系統;代理的用戶端對象無法之間訪問目標對象,有代理提供對單獨的目標對象的存取控制,而外觀的客戶對象可以直接存取子系統中的各個對象,但通常由外觀對象提供對子系統個元件功能的簡化的共同層次的調用。
兩者都是屬於一種銜接性質的功能,代理是一種對象的代表,其他需要與這個對象打交道的操作都是和這個代表交涉。而適配器則不需要虛構出一個代表者,只需要為應付特定使用目的,將原來的類進行一些組合。
總之,面板模式注重簡化介面,適配器模式注重轉換介面,橋接模式注重分離介面,裝飾模式注重在穩定介面的前提下為對象擴充功能。