主要是大腦中有個印象,過程中能想到就往上靠,想不到就想不到了。(擺手表情)
更新2019-05-28,看到對設計模式進行詳細分析的文章 設計模式看了又忘,忘了又看?
常見的模式
工廠模式:減少new 操作。
單例模式:避免大量new操作,創建一個實例,必須給其他對象提供這一實例,必須自行創建這個實例。
註冊模式:全局共享,交換對象。
策略模式:面向對象多形式。
適配器模式:將各種截然不同的函數接口封裝成統一的API
五大創建型模式:
工廠模式(Factory method Pattern):減少new 操作。
- 簡單工廠模式(靜態工廠模式) 擴展性不好,單產品多層級,層級數量不多的情況下
- 工廠方法 一個產品的各個層級方面,層級多且支持擴展
抽象工廠 (Abstract Factory Pattern): 多個產品多個層級方面
單例模式(Singletion Pattern):避免大量new操作,創建一個實例,必須給其他對象提供這一實例,必須自行創建這個實例。
- 只有一個實例;
- 自行實例化(主動實例化)
- 向整個系統提供這個實例
- 餓漢式單例模式 加載方式: 類 加載到 內存 的過程中, 創建好了對象
- 懶漢式單例模式 加載方式: 類 第一次使用才創建對象:synchronized 同一時間點,只允許一個線程執行該方法
(多線程併發,節約內存)
建造者模式(Builder Pattern):
把本來強依賴的東西解綁(降低耦合),解決依賴問題,提高封裝性。
原型模式(Prototype Pattern):
提高創建對象的效率。
六大原則
單一職責原則(Single Responsibility Principle):
方法,接口,類 都有各自的方式進行拆分爲單一原則。
好處:
- 類複雜性降低,實現什麼職責都有清晰明確的定義
- 複雜性降低,可讀性提高
- 可讀性提高,維護性提高
- 變更引起的風向降低,擴展性,維護性提高
里氏替換原則(Liskov Substitution Principle):
父子關係,繼承,不重寫方法。
優點:
- 代碼共享,減少創建類的工作量,每個子類都擁有父類的方法、屬性;
- 提高重用性;
- 子 高於 父;
- 可擴展性提高;
- 提高產品或項目的開放性
缺點:
- 父到子,繼承是侵入性的;
- 降低代碼靈活性;
- 增強耦合性;
- 父類嚴重影響子類
依賴倒置原則(Dependence Inversion Principle):
降低類的耦合性,提高靈活的處理。
最佳:
- 變量的表面類型儘量是 接口或抽象類;
- 任何類都不應該從具體類派生;
- 儘量不覆寫基類方法;
- 結合里氏替換原則使用。
面向接口思維
接口隔離原則(Interface Segregation Principle):
把接口中不常一起使用的方法拆分到不同的接口。(不用每個方法都實現一次!)
迪米特法則(Law of Demeter Principle):最少知識原則(Last Knowledge ~)
高內聚,低耦合(是你的就別給別人,不是你的就別拿)
開閉原則(Open Closed Principle):
對擴展開放,對修改封閉。
(下面的模式沒有仔細看)
十一大行爲型模式
模板方法(Template Method Pattern)
中介者模式(Mediator Pattern)
減少不必要的依賴,降低類間的耦合(MVC,依賴關係剝離)
命令模式(Command Pattern)
進行類的解耦,可擴展性增加;
責任鏈模式(Chain of Reponsibility Pattern)
策略模式(Strategg Pattern)
配合 工廠模式
迭代器模式(Iterator Pattern)
最廣泛的
觀察者模式(Observer Pattern)
消息隊列消費,Android 開發中的事件觸發機制
狀態模式(State Pattern)
降低代碼複雜性,提高可維護性;
有很多 if-else 的語句,可替換!
備忘錄模式(Memento Pattern)
回滾非常重要
解釋模式(Interpreter Pattern)
訪問者模式(Visitor Pattern)
七大結構型模式
適配器模式(Adapter Pattern):
橋接模式(Bridge Pattern):
組合模式(Composite Pattern):
裝飾模式(Decorator Pattern):
外觀模式(Facade Pattern):
享元模式(Flyweight Pattern):
代理模式(Proxy Pattern):