软件设计与体系结构知识总结——第十二章 Design Patterns 2

目录

0.前言

Behavioral Design Pattern

1.Iterator Design Pattern迭代器设计模式(满足开闭原则)

2. Visitor 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() 方法来实现具体功能

优点:满足打开和关闭原则;可以方便地保存命令对象,这样就可以支持以下功能:以后重复执行;支持撤销功能;将不同的命令对象组织成一组,以执行事务

例子:室内温度控制软件;室内温度控制需要自动打开和关闭窗户和风扇;设计两个类,分别封装窗户类和风扇类;通过命令模式实现窗户和风扇的打开和关闭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五倍子的代码空间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值