行为型模式
简介
本文章旨在记录学习设计模式的过程,学习内容主要来自菜鸟教程,网址:设计模式,学习代码整理在:代码仓
十二种行为模式
责任链模式(Chain of Responsibility Pattern)
- 使用场景:有一个请求,将发送者与接收者解耦,用链的形式存储接受者,如果它不能处理的话,将该请求发送给下一个接收者
- 主要思想:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上就可以了
- 代码示例:在代码仓中包名
design.pattern.chain
下
命令模式(Command Pattern)
- 使用场景:认为是命令的地方都可以使用命令模式
- 主要思想:请求以命令的形式包裹在对象中,并传递给调用对象,调用对象寻找可以处理该命令的合适的对象,并把该命令传递给相应的对象,该对象执行命令
- 代码示例:在代码仓中包名
design.pattern.command
下
解释器模式(Interpreter Pattern)
- 使用场景:可以将一个需要解释执行的语言中的句子表示为一个抽象语法树
- 主要思想:构建语法树,定义终结符与非终结符
- 代码示例:在代码仓中包名
design.pattern.command
下
迭代器模式(Iterator Pattern)
- 使用场景:提供一种方法顺序访问聚合对象中各个元素,而又不暴露该对象的内部表示
- 主要思想:把在元素间游走的责任交给迭代器,而不是聚合对象
- 代码示例:在代码仓中包名
design.pattern.iterator
下
中介者模式(Mediator Pattern)
- 使用场景:对象与对象之间存在大量的关联关系,多个类相互耦合,形成网状结构
- 主要思想:将对象相互间的通信封装到一个类里,将网状结构分离为星型结构
- 代码示例:在代码仓中包名
design.pattern.mediator
下
备忘录模式(Memento Pattern)
- 使用场景:需要记录一个对象的内部状态,允许用户取消不确定或错误的操作,能够恢复到它原先的状态,使得他有后悔药可吃
- 主要思想:通过一个备忘录类专门存储对象的状态
- 代码示例:在代码仓中包名
design.pattern.memento
下
观察者模式(Observer Pattern)
- 使用场景:一个对象状态改变给其他对象通知
- 主要思想:在抽象类里用一个List存放观察者们,广播时调用所有观察者的对应方法
- 代码示例:在代码仓中包名
design.pattern.observer
下 - 个人理解:精髓在于所有观察者继承自同一超类,每一观察者须实现接收通知的方法,改变的对象调用所有观察者的这一方法
状态模式(State Pattern)
- 使用场景:代码中的对象有大量的状态
- 主要思想:将各种具体的状态类抽象出来
- 代码示例:在代码仓中包名
design.pattern.state
下 - 个人理解:不同的状态抽象出各自的类,将原对象传入状态类中,状态类可以对对象进行处理
空对象模式(Null Object Pattern)
- 使用场景:使用空对象时
- 主要思想:用空对象取代NULL对象实例的检查
- 代码示例:在代码仓中包名
design.pattern.nullObject
下 - 个人理解:对空对象专门封装一个类,其中对所有接口作实现,以防止NULL可能带来的问题
策略模式(Strategy Pattern)
- 使用场景:一个系统需要动态地在几种算法中选择一种
- 主要思想:将这些算法分别封装成一个个类
- 代码示例:在代码仓中包名
design.pattern.strategy
下
模板模式(Template Pattern)
- 使用场景:整体框架相同,但具体实现不同
- 主要思想:顶层定义好框架,详细实现延迟到子类实现
- 代码示例:在代码仓中包名
design.pattern.template
下
访问者模式(Visitor Pattern)
- 使用场景:数据结构稳定,但操作易变
- 主要思想:在被访问的类里增加一个接受访问者访问的接口,访问者中将每一个被访问者作为访问方法的参数,内部实现对被访问者的访问
- 代码示例:在代码仓中包名
design.pattern.visitor
下 - 参考:菜鸟教程中我不太理解,参考另一篇解释:访问者模式