设计模式类图
設計模式的目標
應對各種需求變化,將變化隔離
23種設計模式分類
一、創建型模式
1、工廠方法模式
符合開閉原則
2、抽象工廠模式
增加產品族支持開閉原則,增加產品等級結構不支持開閉原則。
模式應用:操作系統界面主題
3、建造者模式
將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以構建不同的表示
相比于抽象工廠模式,建造者模式側重于一步步構建一個復雜的對象,返回一個完整的對象
增加具體建造者支持開閉原則
4、原型模式
模式應用:復制粘貼
5、單例模式
單例模式雖然簡單,但是需要理解為什么單例模式的工廠方法和成員變量都是靜態的。
首先,因為要禁止其他程序創建類的對象,單例類的構造函數必須是私有的,那么要怎么創建單例類呢,只有通過類名直接調用類的靜態方法才可以,而靜態方法不能訪問非靜態類成員變量,所以成員變量也必須是靜態的。
模式應用:任務管理器
二、結構型模式
1、適配器模式
類適配器模式
對象適配器模式
模式應用:JDBC驅動軟件
2、橋接模式
橋接模式將抽象部分與實現部分分離。
模式應用:Java虛擬機
3、組合模式
組合模式對單個對象和組合對象的使用具有一致性。
透明組合模式
安全組合模式
模式應用:操作系統目錄結構
4、裝飾模式
裝飾模式分為透明裝飾模式和半透明裝飾模式
透明裝飾模式要求客戶端編程全部聲明為抽象構件類型,半透明裝飾模式允許在客戶端聲明具體裝飾者類型的對象,調用具體裝飾者中新增的方法
模式應用:IO流
5、外觀模式
為自系統中的一組接口提供一個統一的入口。是“迪米特原則”的體現。
在不引入抽象外觀類的情況下,增加新的子系統可能需要修改外觀或客戶端的源代碼,違背了“開閉原則”。
模式應用:網站界面
6、享元模式
使用共享技術來實現大量細粒度對象的復用。
享元模式通常可以和工廠模式、單例模式及組合模式聯用
模式應用:String
7、代理模式
保護代理:控制對真實對象的使用權限
遠程代理:使得客戶端可以訪問在遠程機器上的對象
虛擬代理:可以使用一個小對象來代表一個大對象,例如由于網速原因不能立即顯示圖片時,可以先把小圖片傳送到客戶端
模式應用:遠程控制
三、行為型模式
1、職責鏈模式
核心:抽象處理者類
增加新的具體處理者類對原有類庫無任何影響,符合開閉原則
模式應用:Java異常處理機制
2、命令模式
按鍵設置是命令模式的一種典型應用,使按鍵與接收者解耦
增加新的具體命令無須修改原有系統代碼,滿足開閉原則
模式應用:Java Swing中的ActionListener充當抽象命令類
3、迭代器模式
迭代器將數據的遍歷功能從聚合對象中分離出來,聚合對象只負責存儲數據,而遍歷數據由迭代器來完成,訪問聚合對象的內容無須暴露它的內部表示,迭代器模式是單一職責原則的完美體現
為了實現方便,可以將具體迭代類作為具體聚合類的內部類
增加新的聚合類和迭代器類都無須修改原有代碼,滿足開閉原則
模式應用:Iterator是聚合框架Collection的迭代器
4、中介者模式
通過引入中介者,可以將系統的網狀結構變成以中介者為中心的星狀結構,中介者模式是迪米特原則的一個典型應用
模式應用:MVC框架中Controller是Model和View的中介者
5、觀察者模式
增加新的具體觀察者類符合開閉原則,在具體觀察者和觀察目標之間不存在關聯的情況下,增加新的觀察目標也符合開閉原則
模式應用:Java Swing中的ActionListener充當抽象觀察者
6、狀態模式
狀態模式可以將對象狀態從包含該狀態的類中分離出來,做成一個個單獨的狀態類
大多數的狀態模式都是可以切換狀態的狀態模式,在具體環境類中可以調用到環境類的setState方法,因此狀態類和環境類之間通常還存在關聯關系或者依賴關系,可以切換狀態的狀態模式對開閉原則的支持不太友好,增加狀態類需要修改負責轉換的源代碼,否則無法切換到新增狀態
模式應用:網購訂單的各種狀態
7、策略模式
策略模式是對算法的封裝,它把算法的責任和算法本身分割開,委派給不同的對象管理。
策略模式對開閉原則完美支持
模式應用:JFrame可以設置不同的布局策略
總結
- 上一篇: Delphi 源码格式书写规范
- 下一篇: 设计模式:UML类图、策略模式、单例模式