🚩Design Pattern - 设计模式
目录
Principle 原则 x 6
Open Close 开闭原则:对扩展开放,对修改关闭(通过接口和抽象类)
Liskov Substitution 里氏替换:子类可替换父类。
尽量将一些需要扩展的类或者存在变化的类设计为抽象类或者接口,并将其作为基类,在程序中尽量使用基类对象进行编程。
Dependence Inversion 依赖倒转:针对接口编程,依赖于抽象而非具体
Interface Segregation 接口隔离: 多个隔离的接口优于单个接口,以解耦合
Demeter 迪米特:最少知道原则,实体间减少相互作用,模块独立
Composite Reuse 合成复用:用聚合,而非继承。
Create 创建型
创建型模式 | 特点 |
---|---|
Singleton | 唯一性 |
Prototype | 克隆大对象 |
Builder | 内部结构复杂,关注顺序 |
Factory | 日志、数据库 如 ReflectiveChannelFactory |
Abstract Factory | 多个产品族(换皮肤) |
Structure 结构型
结构型模式 | 特点 |
---|---|
Adapter 适配器 | 补救措施 TomcatRequest -> ServletRequest |
Bridge 桥接 | 扩展两个独立变化的维度,将类的抽象部分和它的实现部分分离出来。 |
Composite 组合 | 部分-整体 |
Decorator 装饰器 | 不增加子类来扩展类 如 Netty 中的WrappedByteBuf |
Facade 外观 | 隐藏系统复杂性,违背开闭原则 |
Flyweight 享元 | 不可分辨的大量对象 |
Proxy 代理 | 创建具有原对象的新对象。 1. 和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 2. 和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。 |
Behavior 行为型
行为型模式 | 特点 |
---|---|
Chain of Responsibility 责任链 | 多个对象同时处理一个请求 如 Netty 中的 ChannelPipeline(ChennelHandler) |
Command 命令 | 可支持撤销、恢复操作 |
Interpreter 解释器 | 高频、特定类型的问题 |
Iterator 迭代器 | 顺序访问聚合对象 |
Mediator 中介者 | 1对n的网状结构->1对1的星形结构 |
Memento 备忘录 | 常用于实现撤销和重做功能,也可以用于实现数据快照、事务管理等应用场景 |
Observer 观察者 | 某对象通知其他对象 如 Netty 中的 ChannelFuture#addListener |
State 状态 | 行为随状态而改变,替代 if…else… 语句 |
Strategy 策略 | 动态在多种行为中选择一种 |
Template 模板 | 抽离通用方法,加final修饰 |
Visitor 访问者 | 违反迪米特、依赖倒转原则 SimpleFileVisitor |
管道+过滤器模式(Channel+Filter)
所有的复杂处理,都可以抽象为管道+过滤器模式(Channel+Filter),用于服务的过滤
- 实现额外的增强处理,如AOP
- 中断当前处理流程,返回特定数据