設計模式是個老生常談的話題, 不同的人對此有不同的看法 新手可能會覺得設計模式難以理解, 並且也只與編程語言有關, 或者只與前端後端有關, 適用範圍很窄 或者就乾脆覺得這玩意兒沒啥卵用, 寫了那麼一大坨只是讓代碼變得複雜難懂, 不如直接複製黏貼刪刪改改來得方便 老手可能會覺得設計模式就是yyds, ...
設計模式是個老生常談的話題, 不同的人對此有不同的看法
- 新手可能會覺得設計模式難以理解, 並且也只與編程語言有關, 或者只與前端後端有關, 適用範圍很窄
或者就乾脆覺得這玩意兒沒啥卵用, 寫了那麼一大坨只是讓代碼變得複雜難懂, 不如直接複製黏貼刪刪改改來得方便 - 老手可能會覺得設計模式就是yyds, 寫代碼時不搞個什麼模式就顯得太low了
不管寫什麼東西都要分離出介面和實現, 搞一個戰未來的模式, 不如此無法體現出設計模式的"靈活性" - 也有人根本沒聽說過什麼設計模式, 但看了些例子之後表示, "就這?"
- ......
什麼是設計模式
設計模式(Design pattern)並不是什麼創新性的發明, 只是對一些解決方案的歸納
就像在 "氧氣" 這個詞出現之前, 人類也是一樣可以呼吸的
針對不同場景下的問題, 開發人員使用了不同的解決方案, 經過整理歸納之後形成了針對特定場景的通用方案, 這些方案被稱為"設計模式"
設計模式六大原則
- 總則: 開放封閉原則(Open Closed Principle,OCP): 對擴展開放, 對修改關閉。即在不修改原有代碼的基礎上進行擴展
- 單一職責原則(Single Responsibility Principle,SRP): 一個類或者一個方法只有一個職責
- 里氏替換原則(Liskov Substitution Principle,LSP): 子類可以替換父類, 並保持父類的功能和特性
- 依賴倒置原則(Dependency Inversion Principle,DIP): 高層模塊不應該依賴於低層模塊, 二者都應該依賴於抽象, 而不是具體的實現細節
- 介面隔離原則(Interface Segregation Principle,ISP): 儘量使用多個專門的介面, 而不是單一的總介面
- 最少知道原則(Law of Demeter,LoD): 一個對象應該對其他對象有儘可能少的瞭解, 不應該直接與其他對象之間發生聯繫
- 合成復用原則(Composite/Aggregate Reuse Principle,CARP): 儘量使用合成, 而不是通過繼承達到復用的目的
眾所周知四大天王有五個, 所以六大原則有七個也是很正常的事情
三大類設計模式
- 創建型模式: 關註對象的創建過程, 包括對象的實例化和組裝方式, 使得代碼更加靈活可擴展
- 結構型模式: 關註對象之間的組成和協作方式, 幫助我們將對象組合成更大的結構, 以實現更複雜的功能
- 行為型模式: 關註對象之間的交互方式和職責劃分, 使得系統中對象之間的通信更加靈活高效
二十三種設計模式
- 創建型模式
- 工廠方法模式(Factory Method Pattern)
- 抽象工廠模式(Abstract Factory Pattern)
- 單例模式(Singleton Pattern)
- 建造者模式(Builder Pattern)
- 原型模式(Prototype Pattern)
- 結構型模式
- 適配器模式(Adapter Pattern)
- 橋接模式(Bridge Pattern)
- 組合模式(Composite Pattern)
- 裝飾模式(Decorator Pattern)
- 外觀模式(Facade Pattern)
- 享元模式(Flyweight Pattern)
- 代理模式(Proxy Pattern)
- 行為型模式
- 責任鏈模式(Chain of Responsibility Pattern)
- 命令模式(Command Pattern)
- 解釋器模式(Interpreter Pattern)
- 迭代器模式(Iterator Pattern)
- 中介者模式(Mediator Pattern)
- 備忘錄模式(Memento Pattern)
- 觀察者模式(Observer Pattern)
- 狀態模式(State Pattern)
- 策略模式(Strategy Pattern)
- 模板方法模式(Template Method Pattern)
- 訪問者模式(Visitor Pattern)