【Java】Java与GoF-23种设计模式
生活随笔
收集整理的這篇文章主要介紹了
【Java】Java与GoF-23种设计模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 設計模式概述
- GoF-23種設計模式
- 設計模式的分類
- 設計模式的原則
- 設計模式在JDK的部分體現
- Singleton
- Factory
- Abstract factory
- Adapter
- Composite
- Decorator
- Observer
- Others
- 設計模式的關系圖
設計模式概述
設計模式(Design pattern)是一套可以反復使用的代碼設計經驗的總結。其目的是為了提高代碼的可讀性、可維護性。各種設計模式最核心的思想就是“適應變化”。
GoF-23種設計模式
GoF(Gang of Four)總結了23種設計模式,這也是我們一般提及的設計模式。
GoF提出的23種設計模式是對已有模式的整理、分類,為軟件設計總結了寶貴的經驗(這些設計經驗可以被重用,但不是簡單的代碼重用)。
設計模式的分類
| 類 | 工廠模式(Factory Method) | 適配器模式(Adapter) | 解釋器模式(Interpreter) 模板模式(Template) |
| 對象 | 抽象工廠模式(Abstract Factory) 建造者模式(Builder) 原型模式(Prototype) 單例模式(Singleton) | 適配器模式(Adapter) 橋接模式(Bridge) 組合模式(Composite) 裝飾器模式(Decorator) 外觀模式(Facade) 享元模式(Flyweight) 代理模式(Proxy) | 責任鏈模式(Chain of Responsibility) 命令模式(Command) 迭代器模式(Iterator) 中介者模式(Mediator) 備忘錄模式(Memento) 觀察者模式(Observer) 狀態模式(State) 策略模式(Strategy) 訪問者模式(Visitor) |
設計模式的原則
- 單一職責原則
要把功能盡可能的細分,每一個類應該只負責一塊內容或只執行一個任務。那么怎么樣才算達到單 一職責了呢,那就是當一個類僅有一個引起它變化的原因時 - 開放封閉原則
盡量不要去修改原有的類,但卻可以擴展現有的功能 - 替換原則
子類必須能夠替換它們的基類 - 依賴倒置原則
高層模塊不應該依賴于低層模塊,二者都應該依賴于抽象;抽象不應依賴于實現細節,實現細節應 該依賴于抽象 - 接口隔離原則
客戶端不應該依賴它不需要的接口;一個類對另一個類的依賴應該建立在最小的接口上
設計模式在JDK的部分體現
Singleton
- java.lang.Runtime#getRuntime()
- java.awt.Toolkit#getDefaultToolkit()
- java.awt.Desktop#getDesktop()
Factory
- java.lang.Class#newInstance()
- java.lang.Class#forName()
- java.lang.reflect.Array#newInstance()
- java.lang.reflect.Constructor#newInstance()
Abstract factory
- java.sql.DriverManager#getConnection()
- java.sql.Connection#createStatement()
Adapter
- javax.swing.JTable(TableModel)
- javax.swing.JList(ListModel)
- java.io.InputStreamReader(InputStream)
- java.io.OutputStreamWriter(OutputStream)
Composite
- java.awt.Container#add(Component)
- javax.swing.JComponent#add(Component)
Decorator
- java.io.BufferedInputStream(InputStream)
- java.io.DataInputStream(InputStream)
- java.io.BufferedOutputStream(OutputStream)
Observer
- java.util.EventListener
Others
《GoF-23種設計模式在Java核心類庫中的應用》
設計模式的關系圖
總結
以上是生活随笔為你收集整理的【Java】Java与GoF-23种设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 质数筛(洛谷P5736题题解,Java语
- 下一篇: 【Java】整数存储单元的设计与模拟