Java与GoF-23种设计模式那不可不说的故事
文章目录
设计模式概述
设计模式(Design pattern)是一套可以反复使用的代码设计经验的总结。其目的是为了提高代码的可读性、可维护性。各种设计模式最核心的思想就是“适应变化”。
GoF-23种设计模式
GoF(Gang of Four)总结了23种设计模式,这也是我们一般提及的设计模式。
GoF提出的23种设计模式是对已有模式的整理、分类,为软件设计总结了宝贵的经验(这些设计经验可以被重用,但不是简单的代码重用)。
设计模式的分类
创建型(Creational) | 结构型(Structural) | 行为型(Behavioral) | |
---|---|---|---|
类 | 工厂模式(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