????? 下面說一下結構型模式:結構型模式是描述如何將類對象結合在一起,形成一個更大的結構,結構模式描述兩種不同的東西:類與類的實例。故可以分為類結構模式和對象結構模式。
在GoF設計模式中,結構型模式有:
?????1.適配器模式 Adapter
?????2.橋接模式 Bridge
?????3.組合模式 Composite
?????4.裝飾模式 Decorator
?????5.外觀模式 Facade
?????6.享元模式 Flyweight
?????7.代理模式 Proxy??
具體來說:
### 適配器模式Adapter
?????適配器模式是將一個類的接口轉換成客戶希望的另外一個接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
?????兩個成熟的類需要通信,但是接口不同,由于開閉原則,我們不能去修改這兩個類的接口,所以就需要一個適配器來完成銜接過程。
?????變壓器就是很好的適配器模式的例子。用電設備所需要的電壓是9V,但是電線上的電壓卻是220V的,我們不能去更改它們的電壓輸入或輸出,所以我們用到了變壓器。變壓器是220V的輸入,9V的輸出。這樣就可以將200V的電壓變為9V的電壓,用變壓器將用電設備連接到了電線上工作了。


????? 上面兩幅圖中,都是Client端需要Request這個方法,但是Adaptee沒有這個方法,所以就需要提供一個中間件/包裝類(Wrapper)Adapter類來銜接。不同的是第一幅圖Adapter繼承自Adaptee,而第二幅圖是在Adapter類中包裝了一個Adaptee的實例。這就決定了第一幅圖講的是“類的結構模式”,而第二幅圖則是“對象的結構模式”。
### 橋接模式 Bridge
?????橋接模式將抽象部分與它的實現部分分離,是它們都可以獨立地變化。它很好的支持了開閉原則和組合鋸和復用原則。實現系統可能有多角度分類,每一種分類都有可能變化,那么就把這些多角度分離出來讓他們獨立變化,減少他們之間的耦合。
?????2個相互耦合的系列,每個系列都有各自的產品變動。將這2個系列抽象成2個角色類,將各自的變化封裝到對象的角色類中,然后再將2個角色類之間用組合的關系表示,這樣就大大簡化了使用類繼承的復雜性,邏輯變得清晰了,易于擴展和維護。
?????橋接模式封裝了變化,完成了解耦,實現了弱耦合。

### 組合模式 Composite
?????組合模式將對象組合成樹形結構以表示部分-整體的層次結構,組合模式使得用戶對單個對象和組合對象的使用具有一致性。就像“放羊娃的故事”一樣(放羊—賺錢—娶妻---生娃—放羊…)。
?????廊坊師范學院=14個二級學院+院長、副院長;每一個二級學院=多個專業+二級學院院長、副院長;每一個專業有學生+班委。大學院可以增刪二級學院和副院長,二級學院的結構跟大學院幾乎一樣,所以也可以增刪專業和副院長。雖然結構復雜,但是操作簡單,只需要進行簡單的遞歸調用即可。

### 裝飾模式 Decorator
????? 裝飾模式動態地給一個對象添加一些額外的職責,就增加功能來說,它比生成子類更靈活。也可以這樣說,裝飾模式把復雜類中的核心職責和裝飾功能區分開了,這樣既簡化了復雜類,有去除了相關類中重復的裝飾邏輯。裝飾模式沒有通過繼承原有類來擴展功能,但卻達到了一樣的目的,而且比繼承更加靈活,所以可以說裝飾模式是繼承關系的一種替代方案。
????? 孫悟空有72變,每一變都可以給他帶來一個附加功能,變成魚可以在水下呼吸,變成鳥可以在天上飛翔。這就是典型的裝飾模式。
????? 裝飾模式解耦了核心和裝飾功能,鎖業也是強調了松耦合。?

### 外觀模式 Facade
????? 外觀模式為子系統中的一組接口提供了同意的界面,外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
????? 外觀模式中,客戶對各個具體的子系統是不了解的,所以對這些子系統進行了封裝,對外只提供了用戶所明白的單一而簡單的接口,用戶直接使用這個接口就可以完成操作,而不用去理睬具體的過程,而且子系統的變化不會影響到用戶,這樣就做到了信息隱蔽。
????? 這就相當于新生接待員。新生對入學流程不清楚,但是接待員學長可是明白的。學生跟著接待員就可以把各個手續辦理完畢了。

### 享元模式 Flyweight
?????享元模式為運用共享技術有效的支持大量細粒度的對象。因為它可以通過共享大幅度地減少單個實例的數目,避免了大量非常相似類的開銷。.
?????享元模式是一個類別的多個對象共享這個類別的一個對象,而不是各自再實例化各自的對象。這樣就達到了節省內存的目的。?

### ?代理模式 Proxy
?????為其他對象提供一種代理,并由代理對象控制對原對象的引用,以間接控制對原對象的訪問。
我們想上外國的網站,但是國家給限制了,所以我們就需要一個可以登錄到外國網站的ip,通過連接到這個ip,再通過這個ip去訪問外國網站。

### 代理模式與外觀模式的區別
代理的客戶對象無法直接訪問目標對象,代理對象提供對單獨目標對象的訪問控制,而外觀模式的客戶對象可以直接訪問子系統中的各個對象,但通常由外觀對象提供對子系統個元件功能的簡化的共同層次的調用接口。
### 代理模式與適配器的區別
??????? 二者都屬于一種銜接性質的功能。代理對象和被代理對象的接口是同一個,但是客戶沒法直接訪問被代理者,只能通過代理對象去完成被代理對象的訪問。而適配器模式是將多個子系統封裝起來,提供一個統一的外部接口,客戶只需要使用這個外部接口即可訪問對象的子系統了。
???????
### 外觀跟適配器的區別
??????? 二者都是對顯存系統的封裝。外觀模式定義了一個新的接口,而適配器則是復用了一個原有的接口;適配器是用來適配對象的,而外觀則是用來適配整個子系統的。