目录
1.Iterator Design Pattern迭代器设计模式(满足开闭原则)
3. Command Pattern命令设计模式(满足开闭原则)
0.前言
本系列文章旨在软件设计与体系结构的知识点,资料来源四川大学授课内容,可用于期末复习,笔者理解尚浅,文中不正之处静待批正。加粗部分为重点。

Behavioral Design Pattern
作用:行为设计模式关心对象之间的责任分配;行为设计模式解释了对象之间如何交互;行为设计模式描绘了运行时难以跟踪的复杂控制流。它将复杂的控制流转移到对象之间的关系上。
行为设计模式包括:Iterator pattern;Visitor pattern;Command pattern;Mediate pattern;Strategy pattern;State pattern
1.Iterator Design Pattern迭代器设计模式(满足开闭原则)
使用场景:
1.对于复杂的数据表,我们可以通过不同的形式进行处理
2.查看存在于链接列表数据结构中的客户姓名;客户端类封装了一个链接列表 CustomerAggregate,用于存储客户姓名;客户端首先在列表中插入一些姓名,然后使用 iterator() 函数访问所有姓名。最后使用 clear() 函数删除所有名称
客户端直接访问数据的缺陷:在 CustomerAggregate 类中,没有一种方法可以查看数据。因此,客户端必须知道 CustomerAggregate 类中的数据结构。对于所有类型的数据,客户端不可能知道如何访问所有数据结构。
解决方法:在 CustomerAggregate 类中添加一个内部类 cusListIterator。它专门用于浏览 CustomerAggregate 的数据
内部类访问的缺点:由于内部类是在数据类 CustomerAggregate 中,因此很难扩展;为了解决这个问题,从数据类 CustomerAggregate 中抽象出了内部访问类
迭代器模式的主要思想是将访问类从数据对象中分离出来,将其放入一个独立的迭代器对象中。迭代器类定义了一个访问列表接口。
- Aggregate:创建和维护数据集,它定义了用于创建相应迭代器对象的 createIterator 接口
- ConcreteAggregate:特定的数据存储结构
- Iterator:迭代器定义了用于遍历数据结构的接口
- ConcreteIterator:具体迭代器
优点:迭代器模式支持以不同方式进行相同的聚合
例子:随机生成整数矩阵;使用不同方法遍历矩阵:奇数遍历/循环遍历
2. Visitor Pattern访问者模式
应用场景:税收制度总是非常复杂。在不同的情况下,税收的计算公式不同
在主方法中创建一个特定的 ElectoronicTax 对象;然后创建一个访问者对象v;最后,调用 tax.accept(v)方法对两个对象tax和v进行交互。
Tax对象与 Vistor 对象之间的互动:
访问者设计模式的目的和工作原理:
访问者模式是一种作用于类层次结构的元素操作,访问者可以让用户在不改变层次结构的情况下定义一种新的操作;用户可以定义各种特定的访问者类,例如一种用于计算价格,另一种用于计算库存数量
- Visitor:为每个元素类定义操作,如 visitFamilyNoChild()
- ConcreteVisitor:具体的访问者类
- Element:定义了一些基本方法。如getData()方法用于获取基本数据;accept()方法用于接受访问者类
- ConcreteElement:具体元素子类
- ObjectStructure:提供一个高级接口,允许访问者访问元素子类。该类可以包含一个结构,例如ArrayList、Vector 等,这些结构提供了要访问的元素子类列表
优点:它可以让我们更轻松地为结构复杂的类添加新方法。也就是说,只需添加一个新的访问者。访问者将相关方法聚合到一个特定的访问者类中,而其他相关方法则聚集到另一个结构清晰的特定类中。
缺点:要添加一个特定的新 ConcreteElement 类是很困难的。如果要添加新的具体元素类,则必须在每个 ConcreteVisitor 类中添加 ConcreteElement 类的访问方法。
例子:运动鞋系列:跑步鞋、步行鞋和溜冰鞋;每个系列都有许多品牌。如阿迪达斯、耐克。现在设计一个销售软件,以实现:计算购买运动鞋的总价;获取每种运动鞋的特性描述。
3. Command Pattern命令设计模式(满足开闭原则)
应用场景:女服务员向厨师传达顾客的要求
程序中包含一些相互关联的对象,每个对象都提供一些有限的特定功能,对于用户的请求,系统提供一些处理程序,这些程序也使用其他对象的功能。这个设计的目的是实现责任分离。
客户端通常是一个图形界面程序,帮助用户选择参数;客户端调用调用器对象,调用器根据用户的选择调用接收器对象;接收器对象包含实际处理程序
命令设计模式的目的和工作原理:命令模式的目的是降低调用者类和接收者类之间的耦合度;命令模式为响应客户端请求创建了一个抽象概念,即设计一个命令接口类。
客户端初始化命令对象,并向命令对象提供信息;调用器Invoker决定何时调用命令;接收器Receiver是实际实现方法;命令Command负责提供所代表的处理方法,但不包含实际代码。
1.客户机创建一个接收器对象 r
2.客户机创建一个命令对象 c,参数 r在第一步中创建
3.客户机创建一个调用者对象 o,参数 c 在第二步中创建
4.调用者对象调用命令对象的 execute() 方法来实现具体功能
优点:满足打开和关闭原则;可以方便地保存命令对象,这样就可以支持以下功能:以后重复执行;支持撤销功能;将不同的命令对象组织成一组,以执行事务
例子:室内温度控制软件;室内温度控制需要自动打开和关闭窗户和风扇;设计两个类,分别封装窗户类和风扇类;通过命令模式实现窗户和风扇的打开和关闭