
访客模式包括以下角色:
访问者: 抽象访问者
ConcreteVisitor: 特定访问者
元素: 抽象元素
ConcreteElement: 具体元素
ObjectStructure: 对象结构
14. 模板模式
有时候我们有相同的步骤来做几件事,只有一点点不同,在软件开发领域中也是如此,如果我们都一步一步地完成这些步骤,那将既费时又费力. . . 因此,我们可以分解并封装这些步骤,然后使用继承进行继承. 当然,不同的可以自己重写和实现!这是模板方法模式提供的解决方案.
所谓的模板方法模式是在方法中定义算法的框架,并将某些步骤延迟到子类中. 模板方法允许子类在不更改算法结构的情况下重新定义算法中的某些步骤.
模板方法模式基于继承的代码重用技术. 在模板方法模式中,我们可以将代码的相同部分放在父类中,并将不同的代码放在不同的子类中. 换句话说,我们需要声明一个抽象父类,以具体方法和具体构造函数的形式实现部分逻辑,然后为子类声明一些抽象方法以实现剩余的逻辑. 不同的子类可以以不同的方式实现. 实现这些逻辑. 因此,模板方法的模板实际上是一种通用方法,但是该方法封装了算法的步骤.

模板方法模式包括以下角色:
AbstractClass: 抽象类
ConcreteClass: 具体的子类
15. 策略模式
我们知道实现一件事情的方法可能很多,但是总有一种最有效的方法,在软件开发领域也是如此,我们也有很多实现功能的方法,但是我们需要一种简单有效的方法来实现它,使系统变得非常灵活,这就是策略模式.
因此,策略模式是定义一系列算法并将其分别封装,以便它们可以在之前相互切换. 此模式独立于使用该算法的客户更改算法.
在策略模式下,它将这些解决问题的方法定义为一个算法组,每种方法对应于一个特定的算法. 在这里,我将算法称为策略. 尽管策略模式定义了算法,但它不提供算法的选择,即哪种算法最适合什么问题. 这与策略模式无关,因此策略的选择必须由客户来完成. 客户必须清楚地知道每种算法之间的区别以及何时何地使用最合适的策略,这增加了客户的负担.
同时,策略模式也完全符合“打开和关闭原理”vc知识库c++设计模式,用户可以在不修改原始系统的情况下选择算法或行为,也可以灵活地添加新的算法或行为. 但是对应于一个类的策略将是系统生成的很多策略.

策略模型包括以下角色:
上下文: 环境类
策略: 抽象策略类
ConcreteStrategy: 特定策略类
16. 状态模式
在许多情况下,对象的行为取决于其变化的属性中的一个或多个. 这些变量属性称为状态,这意味着行为取决于状态,即对象由于外部交互而交互的时间. 并导致他的状态发生变化,从而使其行为也会做出相应的变化. 对于这种情况,我们不能使用行为来控制状态的变化,而应该从状态的角度来思考行为,即在什么状态下将进行哪种行为. 这是状态模式.
所以状态模式是允许对象在内部状态更改时更改其行为,并且对象似乎在修改其类.
在状态模式下,我们可以减少大的if ... else语句,这允许将状态转换逻辑与状态对象集成在一起,但是减少if ... else语句的代价是交换一个大量的类,因此状态模式必定会增加系统中的类或对象的数量.
同时,状态模式是将与某个状态相关的所有行为放入一个类中,您可以轻松地添加一个新状态. 您只需要更改对象的状态即可更改对象的行为. 但这将导致系统的结构和实现更加复杂. 如果使用不当,将导致程序结构和代码混乱,不利于维护.

状态模式包括以下角色:
上下文: 环境类
状态: 抽象状态类
ConcreteState: 具体的状态类
17. 观察者模式
什么是观察者模式?观察者模式定义了对象之间的一对多依赖关系,以便当对象更改状态时,将通知其所有依赖关系并自动更新.
在这里,更改的对象称为观察对象,而通知的对象称为观察者. 一个观察目标可以对应于多个观察者,并且这些观察者之间没有相互联系,因此您可以根据需要添加和删除观察者,从而使系统更易于扩展. 因此,观察者提供了一种对象设计,可以使主题和观察者以松散耦合的方式组合在一起.

观察者模式包括以下角色:
主题: 目标

ConcreteSubject: 特定目标
观察者: 观察者
ConcreteObserver: 特定的观察者
18. 备注模式
每个人都想要后悔医学,但事实是残酷的,没有后悔医学可以买,但不仅如此,软件世界中还存在后悔医学!备忘模式是一种遗憾的药. 它为我们的软件提供了一种后悔医学机制,通过它可以将系统还原到一定的历史状态.
所谓的备忘模式是在不破坏封装的情况下捕获对象的内部状态并将状态保存在对象外部,以便以后可以将对象恢复到原始保存状态. 它实现了信息的封装,因此客户无需关心状态保存的细节. 保存将消耗资源,因此备忘模式的缺点是消耗资源. 如果一个类的成员变量太多,它将不可避免地占用相对较大的资源,并且每次保存时,都会消耗一定数量的内存.

备忘录模式包括以下角色:
发起人: 发起人
Memento: 备忘录
看守者: 负责人
19. 中介模式
每个人都有租房的经验!在这个过程中,中介结构起着非常重要的作用. 它在这里充当中介,在我们和主机之间传递信息. 在外部软件的世界中也需要这种中介. 在我们的系统中,有时对象之间存在牢固而复杂的关系. 如果让它们直接连接,将不可避免地导致整个系统变得非常复杂和可扩展. 很坏!早先我们知道,如果不需要在两个类之间相互通信,我们不应该让它们具有直接关系. 如果确实需要沟通,我们可以通过第三方转发他们的请求. 同样,这里我们使用中介机构来解决此问题.
所谓的中介模型是封装一系列与中介对象的对象交互. 中介消除了显式地互相引用的需要,因此它是松散耦合的并且可以独立地更改它们的交互. 在中介模型中,中介对象用于封装对象之间的关系. 每个对象都可以通过中介对象彼此通信,而无需了解特定信息. 它减少了对象之间的相互关系,提供了系统可重用性,并简化了系统的结构.
在中介模型中,每个对象不需要彼此了解和了解,他们只需要了解中介对象,但是中介对象必须知道所有对象及其关联vc知识库c++设计模式,因此,中介对象的结构太复杂了,承担了太多的责任. 同时,它也是整个系统的核心. 如果有问题,将对整个系统造成问题. 因此,如果系统设计过程中存在“多对多”的复杂关系组,请不要着急使用中介模式,而要仔细考虑您设计的系统是否存在问题.

介体: 抽象介体
ConcreteMediator: 特定中介
同事: 抽象同事班
混凝土同事: 特定同事
20. 迭代器模式
对于迭代,我们经常在编程过程中使用它. 它可以遍历聚合中的每个元素,还可以提供各种不同的遍历方法. 这是迭代器模式的设计动机. 在我们实际的开发过程中,我们可能需要根据不同的需求以不同的方式遍历整个对象,但是我们不希望聚合对象的抽象接口被各种遍历操作填充,因此我们希望有一些东西可以当迭代器模式出现时,以多种不同的方式遍历聚合对象.
什么是迭代器模式?所谓的迭代器模式是提供一种方法来顺序访问聚合对象中的每个元素,而不是公开其内部表示. 迭代器模式是将迭代元素的责任移交给迭代器,而不是聚合对象. 甚至不知道聚合对象的内部结构,我们甚至可以实现聚合对象的迭代.
迭代器模式使聚合对象的结构更简单. 它不需要注意其元素的遍历,而只需要关注它应该关注的内容,这更符合单一责任原则.

迭代器模式包括以下角色:
迭代器: 抽象迭代器
ConcreteIterator: 具体的迭代器
聚合: 抽象聚合类
ConcreteAggregate: 特定的聚合类
21. 解释器模式
所谓的解释器模式是定义语言的语法,并构建解释器以解释语言中的句子. 解释器模式描述了如何形成简单的语言解释器,该语言解释器主要用于使用面向对象的语言开发的编译器中. 它描述了如何为一种简单的语言定义语法,如何用该语言表示一个句子以及如何解释这些句子.

解释器模式包括以下角色:
AbstractExpression: 抽象表达
TerminalExpression: 终端表达式
NonterminalExpression: 非末端表达
上下文: 环境类
客户端: 客户端类
22. 命令模式
有时我们希望对象发送请求,但我们不知道请求的特定收件人是谁,以及特定的过程如何. 我们只知道在程序操作期间指定了特定的请求接收者. 但是,我们将这种请求封装为一个对象,称为命令模式. 因此,命令模式将请求封装到对象中,以便可以使用不同的请求,队列或日志来参数化其他对象. 同时,命令模式支持撤消操作.
命令模式可以完全分离请求的发送者和接收者.
23.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-201874-2.html