1. 程式人生 > >Java設計模式學習總結

Java設計模式學習總結

pattern 實現 產出 創建 依賴 相關 功能 實例化 觀察

設計思想:
面向接口編程;
應對變化(數量、類型、擴展),封裝變化;


(一)設計原則
1. 封裝變化

2. 多用組合,少用繼承

3. 針對接口編程,不針對實現編程

4. 為交互對象之間的松耦合設計而努力

5. 開閉原則(對擴展開放,對修改關閉)

6. 依賴倒置原則:要依賴抽象,不要以來具體類
*變量不可以持有具體類的引用
*不要讓類派生自具體類
*不要覆蓋基類中已實現的方法

(二)設計模式
1. 策略模式(StrategyPattern)
解決算法族的動態切換及擴展性問題

2. 觀察者模式(ObserverPattern)
use: Observable/Observer
解決一對多的通知以及被通知者的動態擴展問題

3. 裝飾者模式(DecoratorPattern)
職責擴充
eg.InputStream->FilterInputStream
借用繼承實現相同接口對象的引用及擴展,賦予新的職責
(動態的將責任附加到對象上,用於擴展功能)

4. 工廠方法模式(FactoryPattern)
use:FactoryClass/Abstract Factory(abstract createComponent)
封裝實現,應對實例化類型及數量的變化。
通過Abstract類聲明工廠方法,子類繼承並分別實現工廠方法。
工廠方法將類的實例化推遲到了子類。

誤區:簡單工廠方法被誤認為是工廠模式。簡單工廠類提供一個create方法,
直接將生產過程放在該方法中實現。和工廠方法的abstract方法有所區分。


5. 抽象工廠模式
提供一個接口,用於創建相關或依賴對象的家族,而不需要指定具體類。

6. 單例模式(Singleton)
線程不安全:
普通方式
線程安全三種方式:
同步getInstance()方法(最差)
急切實例化(類初始化時直接將變量實例化)
雙重檢驗加鎖:延遲實例化的最佳方案

7. 命令模式
將請求封裝成對象
完成操作與實現的解耦(打包運算塊),還可以實現撤銷。
Invoker: SetCommand(command); event=> command.execute();
Command: command.execute(); command.undo();

應用:
a. 產出命令後,放入commandQueue,專門的線程池負責從commandQueue中取command執行
b. 記錄已執行但未徹底結束的操作,持久化到硬盤,實現異常恢復(未保存的word操作)

8. 適配器模式
解決接口不兼容問題,完成接口的轉換。

Java設計模式學習總結