设计模式学习总结(三)

行为型设计模式

行为型解决对象之间的交互问题,将对象与对象之间的行为解耦。行为型设计模式包括观察者模式、模板模式、策略模式、职责链模式、状态模式、迭代器模式、访问者模式、备忘录模式、命令模式、解释器模式、中介模式。

观察者模式

定义: 在对象之间定义一个一对多的依赖,当一个对象发生改变时,所有依赖的对象都会自动收到通知

实现: 包含注册方法和遍历通知方法

应用场景: EventBus、订阅通知

模板模式

定义: 在一个方法中定义一个算法骨架,将某些步骤推迟到子类实现

实现: 定义算法骨架,预留扩展点

应用场景: InputStream、AbstractList、JUnit TestCase等都应用了模板模式的方法

策略模式

定义: 定义一族算法类,将每个算法分别封装起来,让它们可以互相替换

实现: 包含一个策略接口和一组实现这个接口的策略类

应用场景: 可以利用策略模式避免if-else分支判断

职责链模式

定义: 将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它 为止。

实现: 实现包含处理器接口(IHandler)或抽象类 (Handler),以及处理器链(HandlerChain),处理器链可以使用链表或数组实现

应用场景: 敏感词过滤、过滤器、拦截器

状态模式

定义: 当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类

实现: 定义State抽象状态接口,具体状态实现类ConcreteState,调用ConcreteState实现状态转换,

应用场景: 游戏状态机、工作流引擎

迭代器模式

定义: 提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。

实现: 迭代器接口中需要定义 hasNext()、currentItem()、next() 三个最基本的方法

应用场景: 解耦容器代码和遍历代码

访问者模式

定义: 允许一个或者多个操作应用到一组对象上,解耦操作和对象本身。

实现: 定义Visitor访问者和Visitable访问对象两个接口,两个接口是组合关系,在Visitor中实现具体的业务操作,Visitable实现类中接收访问者,并调用访问者业务操作。

应用场景: 访问者模式针对的是一组类型不同的对象(PdfFile、PPTFile、WordFile),需要对这组对象进行一系列不相关的业务操作 (抽取文本、压缩等),我们使用访 问者模式,将对象与操作解耦,将这些业务操作抽离出来,定义在独立细分的访问者类 (Extractor、Compressor)中。

备忘录模式

定义: 也叫快照模式,在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外 保存这个状态,以便之后恢复对象为先前的状态

实现: 封装一个不可变的Snapshot 备忘录类,SnapshotHolder管理备忘录,原始类中提供创建和恢复备忘录方法。

应用场景: 防丢失、撤销、恢复、提供可回滚操作;大对象备份

命令模式

定义: 命令模式将请求(命令)封装为一个对象,这样可以使用不同的请求参数化其他对象(将不 同请求依赖注入到其他对象),并且能够支持请求(命令)的排队执行、记录日志、撤销等 (附加控制)功能。

实现: 命令模式用的最核心的实现手段,是将函数封装成对象。根据请求的不同,执行不同的命令,与策略模式的实现相似,主要是意图不同。

应用场景: 异步、延迟、排队执行命令、撤销重做 命令、存储命令、给命令记录日志等等

解释器模式

定义: 解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。

实现: 核心思想,就是将语法解析的工作拆分到各个小类中,以此来避免大而全的解析类,定义解析接口,根据语法解析优先级顺序调用解析器。

应用场景: 编译器、规则引擎、正则表达式

中介模式

定义: 中介模式定义了一个单独的(中介)对象,来封装一组对象之间的交互。 将这组对象之间的交互委派给与中介对象交互,来避免对象之间的直接交互。

实现: 将多个参与者的行为封装到中介者中,中介者负责统一的业务处理。

应用场景: 当参与者之间的交互关系错综复杂,维护成本很高的时候,我们才考虑使用中介模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值