行为型软件设计模式
迭代器模式
-
模式定义:
迭代器模式(Iterator Pattern) :提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。
该模式属于对象行为型模式。它包含两层含义:
1.聚合对象(集合对象)需要被遍历。
2.迭代器对象用于对聚合对象进行遍历访问。 -
模式结构:
- Iterator(迭代器接口):声明遍历操作,如
next()、hasNext()等。 - ConcreteIterator(具体迭代器):实现特定集合的遍历算法,维护自身遍历状态。
- Collection(聚合接口):声明方法以获取与集合兼容的迭代器。
- ConcreteCollection(具体集合):返回特定的具体迭代器实例。

- Iterator(迭代器接口):声明遍历操作,如
-
优点:
- 符合 单一职责原则:遍历逻辑与集合分离。
- 符合 开闭原则:可新增不同迭代器无需修改集合代码。
- 支持并行遍历同一集合。
- 支持暂停与恢复遍历。
-
缺点:
- 如果程序只与简单的集合进行交互, 应用该模式可能会矫枉过正。
- 对于某些特殊集合, 使用迭代器可能比直接遍历的效率低。
访问者模式
- 模式定义:
将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。 - 模式结构:
- Visitor(抽象访问者):声明对每种元素的访问操作。
- ConcreteVisitor(具体访问者):实现针对元素的具体行为。
- Element(抽象元素):声明
accept()接口以接收访问者。 - ConcreteElement(具体元素):实现
accept(),调用访问者的对应方法。 - ObjectStructure(对象结构):包含元素集合,可迭代元素供访问者访问。

-
优点:
- 使得增加新的访问操作变得很容易。
- 将有关元素对象的访问行为集中到一个访问者对象中,而不是分散到一个个的元素类中。
- 可以跨过类的等级结构访问属于不同的等级结构的元素类。
- 让用户能够在不修改现有类层次结构的情况下,定义该类层次结构的操作。
-
缺点:
- 增加新的元素类很困难。在访问者模式中,每增加一个新的元素类都意味着要在抽象访问者角色中增加一个新的抽象操作,并在每一个具体访问者类中增加相应的具体操作,违背了开闭原则的要求。
- 破坏封装。访问者模式要求访问者对象访问并调用每一个元素对象的操作,这意味着元素对象有时候必须暴露一些自己的内部操作和内部状态,否则无法供访问者访问。
命令模式
-
模式定义:
将请求封装成对象,从而使不同请求参数化客户端、队列化请求、记录日志、支持撤销操作。 该模式也称 动作模式 (Action)、事务模式 (Transaction)。
-
模式结构:
- Command(抽象命令):声明执行操作的接口。
- ConcreteCommand(具体命令):实现命令接口,调用接收者完成操作。
- Invoker(调用者):持有并触发命令对象。
- Receiver(接收者):真正执行命令逻辑的对象。
- Client(客户端):创建命令、接收者、调用者对象并组装。

-
优点:
- 降低系统的耦合度。
- 新的命令可以很容易地加入到系统中。
- 可以比较容易地设计一个命令队列和宏命令(组合命令)。
- 可以方便地实现对请求的 撤销(Undo)和 重做 (Redo)。
-
缺点:
- 系统可能产生大量具体命令类,增加复杂性
中介者模式
-
模式定义:
中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 中介者模式又称为调停者模式,它是一种对象行为型模式。
-
模式结构:
- Mediator(抽象中介者):定义注册、转发同事对象消息的接口。
- ConcreteMediator(具体中介者):维护同事对象,协调它们的交互。
- Colleague(抽象同事):持有中介者引用,与其他同事交互时通过中介者。
- ConcreteColleague(具体同事):实现抽象同事接口。

-
优点:
- 简化了对象之间的交互。
- 将各同事解耦。
- 减少子类生成。
- 可以简化各同事类的设计和实现。
-
缺点:
- 在具体中介者类中包含了同事之间的交互细节,可能会导致具体中介者类非常复杂,使得系统难以维护。

被折叠的 条评论
为什么被折叠?



