下面說一下結構型模式:結構型模式是描述如何將類對象結合在一塊兒,造成一個更大的結構,結構模式描述兩種不一樣的東西:類與類的實例。故能夠分爲類結構模式和對象結構模式。設計模式
在GoF設計模式中,結構型模式有:app
1.適配器模式 Adapter網站
2.橋接模式 Bridgespa
3.組合模式 Composite設計
4.裝飾模式 Decorator代理
5.外觀模式 Facade中間件
6.享元模式 Flyweight對象
7.代理模式 Proxy 繼承
具體來講:遞歸
適配器模式是將一個類的接口轉換成客戶但願的另一個接口。適配器模式使得本來因爲接口不兼容而不能一塊兒工做的那些類能夠一塊兒工做。
兩個成熟的類須要通訊,可是接口不一樣,因爲開閉原則,咱們不能去修改這兩個類的接口,因此就須要一個適配器來完成銜接過程。
變壓器就是很好的適配器模式的例子。用電設備所須要的電壓是9V,可是電線上的電壓倒是220V的,咱們不能去更改它們的電壓輸入或輸出,因此咱們用到了變壓器。變壓器是220V的輸入,9V的輸出。這樣就能夠將200V的電壓變爲9V的電壓,用變壓器將用電設備鏈接到了電線上工做了。
上面兩幅圖中,都是Client端須要Request這個方法,可是Adaptee沒有這個方法,因此就須要提供一箇中間件/包裝類(Wrapper)Adapter類來銜接。不一樣的是第一幅圖Adapter繼承自Adaptee,而第二幅圖是在Adapter類中包裝了一個Adaptee的實例。這就決定了第一幅圖講的是「類的結構模式」,而第二幅圖則是「對象的結構模式」。
橋接模式將抽象部分與它的實現部分分離,是它們均可以獨立地變化。它很好的支持了開閉原則和組合鋸和複用原則。實現系統可能有多角度分類,每一種分類都有可能變化,那麼就把這些多角度分離出來讓他們獨立變化,減小他們之間的耦合。
2個相互耦合的系列,每一個系列都有各自的產品變更。將這2個系列抽象成2個角色類,將各自的變化封裝到對象的角色類中,而後再將2個角色類之間用組合的關係表示,這樣就大大簡化了使用類繼承的複雜性,邏輯變得清晰了,易於擴展和維護。
橋接模式封裝了變化,完成了解耦,實現了弱耦合。
組合模式將對象組合成樹形結構以表示部分-總體的層次結構,組合模式使得用戶對單個對象和組合對象的使用具備一致性。就像「放羊娃的故事」同樣(放羊—賺錢—娶妻---生娃—放羊…)。
廊坊師範學院=14個二級學院+院長、副院長;每個二級學院=多個專業+二級學院院長、副院長;每個專業有學生+班委。大學院能夠增刪二級學院和副院長,二級學院的結構跟大學院幾乎同樣,因此也能夠增刪專業和副院長。雖然結構複雜,可是操做簡單,只須要進行簡單的遞歸調用便可。
裝飾模式動態地給一個對象添加一些額外的職責,就增長功能來講,它比生成子類更靈活。也能夠這樣說,裝飾模式把複雜類中的核心職責和裝飾功能區分開了,這樣既簡化了複雜類,有去除了相關類中重複的裝飾邏輯。裝飾模式沒有經過繼承原有類來擴展功能,但卻達到了同樣的目的,並且比繼承更加靈活,因此能夠說裝飾模式是繼承關係的一種替代方案。
孫悟空有72變,每一變均可以給他帶來一個附加功能,變成魚能夠在水下呼吸,變成鳥能夠在天上飛翔。這就是典型的裝飾模式。
裝飾模式解耦了核心和裝飾功能,鎖業也是強調了鬆耦合。
外觀模式爲子系統中的一組接口提供了贊成的界面,外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
外觀模式中,客戶對各個具體的子系統是不瞭解的,因此對這些子系統進行了封裝,對外只提供了用戶所明白的單一而簡單的接口,用戶直接使用這個接口就能夠完成操做,而不用去理睬具體的過程,並且子系統的變化不會影響到用戶,這樣就作到了信息隱蔽。
這就至關於新生接待員。新生對入學流程不清楚,可是接待員學長但是明白的。學生跟着接待員就能夠把各個手續辦理完畢了。
享元模式爲運用共享技術有效的支持大量細粒度的對象。由於它能夠經過共享大幅度地減小單個實例的數目,避免了大量很是類似類的開銷。.
享元模式是一個類別的多個對象共享這個類別的一個對象,而不是各自再實例化各自的對象。這樣就達到了節省內存的目的。
爲其餘對象提供一種代理,並由代理對象控制對原對象的引用,以間接控制對原對象的訪問。
咱們想上外國的網站,可是國家給限制了,因此咱們就須要一個能夠登陸到外國網站的ip,經過鏈接到這個ip,再經過這個ip去訪問外國網站。
代理的客戶對象沒法直接訪問目標對象,代理對象提供對單獨目標對象的訪問控制,而外觀模式的客戶對象能夠直接訪問子系統中的各個對象,但一般由外觀對象提供對子系統個元件功能的簡化的共同層次的調用接口。
兩者都屬於一種銜接性質的功能。代理對象和被代理對象的接口是同一個,可是客戶無法直接訪問被代理者,只能經過代理對象去完成被代理對象的訪問。而適配器模式是將多個子系統封裝起來,提供一個統一的外部接口,客戶只須要使用這個外部接口便可訪問對象的子系統了。
兩者都是對顯存系統的封裝。外觀模式定義了一個新的接口,而適配器則是複用了一個原有的接口;適配器是用來適配對象的,而外觀則是用來適配整個子系統的。