照需而定之【設計模式】

【前言】
每一種設計模式,怎麼使用大家可能都會。但是在實際工作中,遇到形式各樣的需求,卻一時想不到使用什麼樣的設計模式來實現此需求。怎麼辦呢?這就是本文的立意。

設計模式分類

設計模式共有23種,分爲三類:創建型、結構型、行爲型。
1、創建型:
提供了一種在創建的對象的同時隱藏創建邏輯的方式,而不是使用new運算符直接實例化對象。
這使得程序在判斷針對某個給定實例需要創建那些對象時更加靈活。
包含:工廠模式、抽象工廠模式、單例模式、創造者模式、原型模式。
2、結構型:
關注類和對象的組合,繼承的概念被用來組合接口和定義組合對象獲得新功能的方式。
包含:適配器模式、橋接模式、過濾器模式、組合模式、裝飾器模式、
外觀模式、享元模式、代理模式
3、行爲型:
關注對象之間的通信
包含:責任鏈模式、命令模式、解釋器模式、迭代器模式、中介者模式
備忘錄模式、觀察者模式、空對象模式、策略模式、模板模式、訪問者模式。
【拓展:J2EE模式】
關注表示層,是由Sun java center鑑定的。
包含:MVC模式、業務代表模式、組合實體模式、數據訪問對象模式、
前端控制器模式、攔截過濾器模式、服務定位器模式、傳輸對象模式

設計模式6大原則

  • 1、開閉原則:對擴展開放、對修改關閉
  • 2、里氏代換原則:任何基類可以出現的地方,子類一定可以出現。
  • 3、依賴倒轉原則:針對接口編程,依賴抽象不依賴具體
  • 4、接口隔離原則:使用多個隔離的接口,比使用單個接口要好。
  • 5、迪米特法則,最少知道原則:一個實體應當儘量少地與其他實體類之間發生相互作用
  • 6、合成複用原則:儘量使用合成聚合的方式,而不是使用繼承。

    【1、工廠模式】

    • 屬於創建型模式,我們創建的對象不會對客戶端暴露創建邏輯
    • 通過使用一個共同的接口來指向新創建的對象。
      1、作用:
      定義一個創建對象的接口,讓其子類自己決定實例化哪一個工廠類,工廠模式使其創建過程延遲到子類進行。

2、自我概括
一個接口,有着不同的實現類。通過不同的條件,來獲取實體類的對象。
3、應用舉例
我想吃米線,米線分爲“過橋米線”、“砂鍋米線”、“酸辣米線”....

【抽象工廠模式】

        * 圍繞一個超級工廠創建其他工廠。該超級工廠又稱爲其他工廠的工廠。       
        * 這種類型的設計模式屬於創建型模式。

1、作用
提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。主要解決接口選擇的問題。
2、自我概括
多個接口,每個接口可以派生出多個實現類,來獲取不同實體類對象。
3、應用舉例
我想吃飯,這裏有套餐A(米線、涼菜、飲料...)、套餐B(炸薯條、炸醬麪...)....

工廠模式 抽象工廠模式
針對一個產品等級結構 面向多個產品等級結構
一個抽象產品類 多個抽象產品類
可以派生出多個具體產品類 每個抽象類可以派生多個具體產品類
每個具體工廠類只能創建一個具體產品類實例 每個具體工廠類,可以創建多個具體產品類實例

照需而定之【設計模式】

【2、單例模式】

1、作用
保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。
主要解決,一個全局使用的類頻繁地創建與銷燬。
2、自我概括
判斷系統中是否已經有這個單例,有則返回,無則創建。
3、應用舉例
整一個全局性的,例如每次登陸時,往session裏塞一個用戶對象。

【3、建造者模式】

1、作用
使用簡單對象構建成複雜對象。
2、自我概括
一些基本的部分不會概念,其他組合的部分經常發生變化。
3、應用舉例
我愛吃板面,板面是基本不變的,而其辣椒、豆腐皮、火腿、雞蛋、生菜、海帶、豆蔻、加面等都是經常變化的。然後會出現15元套餐A、套餐B...

【4、原型模式】

1、作用
實現一個原型接口,該接口用於創建當前對象的克隆。
2、自我概括
直接常見對象的代價比較大,我們可以緩存該對象,再下一個請求時返回它的克隆。
3、應用舉例
當一個對象不容易創建時,使用克隆。

【5、適配器模式】

1、作用
作爲兩個不兼容的接口的橋樑,它結合了兩個獨立接口的功能。
2、自我概述
將一個類的接口轉換成另一個接口,使得原本不兼容的,可以在一起工作。
3、應用舉例
兩個接口不兼容。

【 6、橋接模式】

1、作用
把抽象化與實現化解耦,使得兩者獨立變化。
2、自我概述
使實現類的功能獨立於接口實現類,將抽象部分與實現部分分離,使他們獨立變化。
3、應用舉例
對於那些不希望使用繼承或因爲多層繼承導致系統類的個數急劇增加的系統,橋接模式尤爲適用。

【 7、過濾器模式-標準】

1、作用
使用不同的標準來過濾一組對象,通過邏輯運算以解耦的方式把他們連接起來。
2、自我概括
其實是將組合型的過濾器和具體實現類型的過濾器進行抽象, 將不同類型的過濾器抽象出一個方法, 然後使用組合型的過濾器來組合, 最後達到應用多個過濾器過濾數據源的作用
3、應用舉例
消息過濾器。

【 8、組合模式-整體】

1、作用
把一組相似的對象當做一個單一的對象。
2、自我概述
將對象組合成樹形結構以表示“部分-整體”的層次結構。
3、應用舉例
部分、整體場景,如樹形菜單,文件、文件夾的管理。

【 9、裝飾器模式】

1、作用
允許向一個現有對象添加新的功能,同時又不改變其結構。
2、自我概述
用裝飾類包裝原有的類,以提供額外功能。
3、應用舉例
自行車上裝了一個充電器,既能騎車,還能充電。

【 10、外觀模式】

1、作用
隱藏系統的複雜性,向客戶端提供一個客戶端可以訪問系統的接口。
2、自我概述
提供客戶端請求的簡化方法和對現有系統類方法的委託調用。
3、應用舉例
將複雜的接口提供外界訪問的模塊。

【11、享元模式】

1、作用
用於減少創建對象的數量,減少內存佔用和提高性能。
2、自我概述
嘗試重複使用現有的同類對象,如果找不到匹配的對象,則創建新對象。
3、應用舉例
1、系統有大量相似對象。 2、需要緩衝池的場景。

【12、代理模式】

1、作用
一個類代表另一個類的功能,爲其他對象提供一種代理以控制對這個對象的訪問。
2、自我概述
在直接訪問對象時出現問題(遠程服務、對象創建開銷大、安全控制),我們可以在訪問此對象時加上一個對此對象的訪問層。
3、應用舉例
想在訪問一個類時做一些控制,增加中間層。

注意事項: 1、和適配器模式的區別:適配器模式主要改變所考慮對象的接口,而代理模式不能改變所代理類的接口。 2、和裝飾器模式的區別:裝飾器模式爲了增強功能,而代理模式是爲了加以控制。

【13、責任鏈模式】

1、作用
爲請求創建了一個接收者對象的鏈,對請求的發送者和接收者進行解耦。
2、自我概述
每個接收者都包含對另一個接收者的引用,如果一個對象不能處理該請求,那麼他會把相同的請求傳給下一個接收者。讓多個對象都有可能接收請求,將這些對象連接成一條鏈,並沿着這條鏈傳遞請求,直到有對象處理爲止。
3、應用舉例
有多個對象可以處理同一個請求,具體哪個對象處理該請求由運行時刻自動確定。

【14、命令模式】

1、作用
請求以命令的形式包裹在對象中,並傳給調用對象。調用對象尋找可以處理該命令的合適對象,把命令傳給相應的對象,執行該命令。
2、自我概括
將一個請求封裝成一個對象,用不同的請求對客戶端進行參數化。
3、應用舉例
在某些場合,比如要對行爲進行"記錄、撤銷/重做、事務"等處理。

【15、解釋器模式】

1、作用
實現了一個表達式接口,該接口解釋一個特定的上下文。
2、自我概括
給定一個語言,定義它的文法表示,定義一個解釋器,這個解釋器使用該標識來解釋語言中的句子。對於一些固定文法構建一個解釋句子的解釋器。
3、應用舉例
如果一種特定類型的問題發生的頻率足夠高,那麼可能就值得將該問題的各個實例表述爲一個簡單的句子。這樣就可以構建一個解釋器,該解釋器通過解釋這些句子來解決該問題。

【16、迭代器模式】

1、作用
用於順序訪問集合對象的元素,不需要知道集合對象的底層表示。
2、自我概括
提供一種方法順序訪問一個聚合對象中各個元素,而無須暴露該對象的內部標識。
3、應用舉例
JAVA 中的 iterator

【17、中介者模式】

1、作用
用來降低多個對象和類之間的通信複雜性,提供一箇中介類,處理不同類之間的通信。
2、自我概括
用一箇中介對象來封裝一系列的對象交互,中介者使對象不需要顯式的相互引用。主要解決,對象之間存在大量的關聯關係,若一個對象發生改變,我們需要跟蹤處理與之對應的對象。
3、應用舉例
系統中對象之間存在比計較複雜的引用關係,導致他們之間的依賴關係結構混亂難以複用。

【18、備忘錄模式】

1、作用
保存一個對象的某個狀態,以便在適當的時候回覆對象。
2、自我概括
在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態。
3、應用舉例
後悔藥,回滾

【19、觀察者模式】

1、作用
當對象間存在一對多關係,當一個對象被修改時,會自動通知它的依賴對象。
2、自我概括
定義對象間一種一對多的依賴關係,當一個對象發生改變時,所有依賴它的對象都會得到通知並自動更新。
3、應用舉例
需要在系統中創建一個觸發鏈,A對象的行爲將影響B對象,B對象的行爲將影響C對象……,可以使用觀察者模式創建一種鏈式觸發機制。

【20、狀態模式】

1、作用
類的行爲是基於它的狀態改變的,我們創建表示各種狀態的對象和一個行爲隨着狀態對象改變而改變的對象。
2、自我概括
允許對象在內部狀態發生改變時,改變它的行爲,對象看起來好像修改了它的類。
3、應用舉例
1、行爲隨狀態改變而改變的場景。
2、條件、分支語句的代替者。

【21、空對象模式】

1、作用
一個空對象取代null對象實例的檢查。
2、自我概括
null對象不是檢查空值,而是反應一個不做任何動作的關係。這樣null對象也可以在數據不可用時提供默認行爲。
3、應用舉例
null對象檢查。

【22、策略模式】

1、作用
一個類的行爲或其算法可以在運行時更改。
2、自我概括
我們創建表示各種策略的對象和一個行爲隨着策略對象改變的對象,動態的讓一個對象在許多行爲中選擇一種行爲的行爲。
定義一些列的算法,把他們一個個封裝起來,並且使它們可互相替換。
3、應用舉例
一個系統有許多類,而區分他們的只是他們的直接行爲。
旅行的出遊方式,選擇騎自行車、坐汽車,每一種旅行方式都是一個策略。

【23、模板模式】

1、作用
一個抽象類公開定義了執行它的方法的模板,它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行。
2、自我概述
定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。
3、應用舉例
1、有多個子類共有的方法,且邏輯相同。
2、重要的、複雜的方法,可以考慮作爲模板方法。

【24、訪問者模式】

1、作用
我們使用了一個訪問者類,它改變了元素類的執行算法。通過這種方式,元素的執行算法可以隨着訪問者改變而改變。
2、自我概述
將數據結構與數據操作分離,元素的執行算法隨着訪問者的改變而改變。
3、應用舉例
對一個對象進行不同不相關操作。

【25、MVC模式】

1、MVC 模式代表 Model-View-Controller(模型-視圖-控制器) 模式。
2、這種模式用於應用程序的分層開發。
3、Model(模型) - 模型代表一個存取數據的對象或 JAVA POJO。它也可以帶有邏輯,在數據變化時更新控制器。
4、View(視圖) - 視圖代表模型包含的數據的可視化。
5、Controller(控制器) - 控制器作用於模型和視圖上。它控制數據流向模型對象,並在數據變化時更新視圖。它使視圖與模型分離開。

照需而定之【設計模式】

參考:《設計模式|菜鳥教程》
【業務代表模式】、【組合實體模式】、【數據訪問對象模式】、【前端控制器模式】、【攔截過濾器模式】、【服務定位器模式】、【傳輸對象模式】略!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章