用最通俗易懂的案例诠释常用设计模式
接口 = 规范
抽象类 = 规范的具象化
普通类 = 遵循规范的运作者
打勾表示已实现
若实现上无语言特性上的差别则优先选择 Kotlin 实现
否则 Java 与 Kotlin 版本均实现一遍
- 单例模式 Singleton (java / kotlin)
- 责任链模式 ChainOfResponsibility (java / kotlin)
- 适配器模式 Adapter (java / kotlin)
- 桥接模式 Bridge (java / kotlin)
- 组合模式 Composite (java / kotlin)
- 装饰器模式 Decorator (java / kotlin)
- 外观模式 Facade (java / kotlin)
- 工厂方法模式 Factory Method (java / kotlin)
- 原型模式 Prototype (java / kotlin)
- 享元模式 Flyweight (java / kotlin)
- 代理模式 Proxy (java / kotlin)
- 模板方法模式 Template Method (java / kotlin)
- 策略模式 Strategy (java / kotlin)
- 命令模式 Command (java / kotlin)
- 迭代器模式 Iterator (java / kotlin)
- 观察者模式 Observer (java / kotlin)
- 中介者模式 Mediator (java / kotlin)
- 备忘录模式 Memento (java / kotlin)
- 解释器模式 Interpreter (java / kotlin)
- 访问者模式 Visitor (java / kotlin)
- 状态模式 State (java / kotlin)
- 构造者模式 Builder (java / kotlin)
但凡写过几年代码的,大多数人其实哪怕不知道某个设计模式,也可能在无意用使用过了。
因为不论什么模式,其核心是相通的,就是让代码更加符合软件设计原则
但如果是系统性学习设计模式的话,一板一眼的设计模式非常无趣, 如果把设计模式当成开箱即用的工具,那情况会有所不同。 这也是为什么会将设计模式进行分类的一个原因。
写代码(尤其是 Java 这样的面向对象的代码)无非有以下几种情况:
- 管理对象创建
- 管理数据结构
- 管理运行逻辑
这也是设计模式对应的三大类:
- 创建型模式
- 工厂方法
- 抽象工厂
- 单例
- 原型
- 结构型模式
- 适配器
- 桥接
- 组合
- 装饰
- 外观
- 享元
- 代理
- 行为型模式
- 责任链
- 命令
- 迭代器
- 中介者
- 备忘录
- 观察者
- 状态
- 策略
- 模板方法
- 访问者
只要在平时写代码中保持一种敏感性,时刻将当下要写或在写的代码做一个类型鉴别, 是对象创建,数据结构,还是业务逻辑。 当有所区分后,就可以考虑是否有对应的设计模式来处理当下的代码。
习惯以后,设计模式本身也就不太需要再特地提起了, 无论面对什么复杂的业务情况,都能像武林高手一样见招拆招。