![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 83
云中飞鸿--张*峰
这个作者很懒,什么都没留下…
展开
-
访问者模式
访问者模式要求访问者对象访问并调用每一个节点对象的操作,这隐含了一个对所有节点对象的要求:它们必须暴露一些自己的操作和内部状态。每一个单独的访问者对象都集中了相关的行为,从而也就可以在访问的过程中将执行操作的状态积累在自己内部,而不是分散到很多的节点对象中。每增加一个新的节点都意味着要在抽象访问者角色中增加一个新的抽象操作,并在每一个具体访问者类中增加相应的具体操作。Visitor模式也叫访问者模式,是行为模式之一,它分离对象的数据和行为,使用Visitor模式,可以不修改已有类的情况下,原创 2024-07-16 16:10:28 · 531 阅读 · 0 评论 -
解释器模式
一、解释器模式(Interpreter Pattern)提供了一种方法来定义语言的文法,然后用该语言写出来的句子可以被该语言解释器解释。在这种模式中,我们需要定义一个表达式接口,以及该接口的实现,它实现了解释操作。(1)抽象表达式:声明抽象的解释操作,是终结符表达式和非终结符表达式的公共父类。(2)终结符表达式实现与文法中的终结符相关联的解释操作(叶子节点)(3)非终结符表达式实现文法中非终结符的解释操作(非叶子节点)类行为型模式,定义语言的文法,建立一个解释器来解释该语言中的句子。原创 2024-07-16 14:48:58 · 218 阅读 · 0 评论 -
中介者模式
中介者模式(Mediator Pattern)和代理模式(Proxy Pattern) 在某些表述上有些类似,但是他们是完全不同的两个设计模式,中介者模式的⽬的是降低系统中各个对象之间的直接耦合,通过引⼊⼀个中介者对象,使对象之间的通信集中在中介者上。协调作用(行为性):中介者可以更进一步的对同事之间的关系进行封装,同事可以一致地和中介者进行交互,而不需要指明中介者需要具体怎么做,中介者根据封装在自身内部的协调逻辑,对同事的请求进行进一步处理,将同事成员之间的关系行为进行分离和封装。转载 2024-07-15 11:30:47 · 14 阅读 · 0 评论 -
UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖.聚合关系是关联关系的一种,是强的关联关系;转载 2024-07-12 18:00:00 · 45 阅读 · 0 评论 -
迭代器模式
我们使用的聚合对象各种各样,比如vector、list、tree、map等等,既然是聚合,那就有访问其个体的需要。而遍历访问这个行为可能有深度优先、广度优先、顺序遍历、逆序遍历等等,迭代器的意义就是将这个行为抽离封装起来,这样客户端只需要调用合适的迭代器,来进行对应的遍历,而不用自己去实现这一行为。迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可以让外部代码透明的访问集合内部的数据。实例和它的迭代器,然后使用迭代器来遍历并打印容器中的元素。原创 2024-07-12 15:07:31 · 468 阅读 · 0 评论 -
策略 模式
原文链接:https://blog.csdn.net/h8062651/article/details/136574981。转载 2024-07-04 16:46:18 · 14 阅读 · 0 评论 -
模板方法模式
经典设计模式大概有23种。设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案。从定义可以看出,设计模式的使用有很多的局限性。一定要明确它解决什么问题,再使用它。当不清楚设计模式解决什么问题时不要轻易使用。通俗的讲,设计模式是解决软件开发过程中一些问题的固定套路。不要过度的封装或使用设计模式,除非明确了需求的具体变化方向,而且变化方向的点是反复的出现,才会使用设计模式;即慎用设计模式。设计模式要到达一定的工程代码量才能精通。但是,了解设计模式是需要的。转载 2024-07-04 11:22:05 · 32 阅读 · 0 评论 -
享元 模式
享元模式(Flyweight Pattern)是一种结构型设计模式,它旨在减少对象的数量,从而降低内存和性能消耗。享元模式的核心思想是共享相同状态的多个对象,而不是为每个对象都分配独立的内存。转载 2024-07-03 10:31:06 · 17 阅读 · 0 评论 -
装饰器模式
在 C++ 中,装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更为灵活,它可以在不修改现有类结构的情况下增加新的功能。这个接口是装饰器模式中的关键部分,因为它允许装饰器和组件对象以统一的方式工作。具体装饰器类实现了装饰器接口,并且可以在其操作中添加额外的功能,同时调用组件对象上的操作。(4)具体装饰器(Concrete Decorator): 实现了装饰器接口或抽象类的具体类。2 装饰器模式的实现步骤。转载 2024-07-02 13:26:46 · 14 阅读 · 0 评论 -
c++装饰器模式 和 多重继承区别
在这两种模式中,你都可以添加新的功能,但装饰器模式提供了更好的封装性和灵活性,而多重继承可以直接添加更多的接口。装饰器模式在某些情况下更加清晰和可扩展,但多重继承可以在一些情况下提供更直接的访问和更高的效率。装饰器模式通常用于向对象添加额外的职责,而不会影响其他用户,它遵循“开放-封闭”原则。2.装饰器模式通常使用组合(即一个装饰器包含一个被装饰的对象),而多重继承可以使用多重继承或虚拟继承(用于解决多重继承带来的问题)。在C++中,装饰器模式和多重继承。原创 2024-07-02 11:25:52 · 281 阅读 · 0 评论 -
建造者模式
首先,定义 Product 类,它表示最终要构建的对象。public:private:public:然后,创建实现 HouseBuilder 接口的 ConcreteBuilder 类。转载 2024-06-27 17:36:37 · 18 阅读 · 0 评论 -
原型 模式
原文链接:https://blog.csdn.net/h8062651/article/details/136289765原型模式(Prototype Pattern)是一种创建型:通过来。转载 2024-06-27 11:09:56 · 20 阅读 · 0 评论 -
状态 模式
State的定义:不同的状态,不同的行为;或者说,每个状态有着相应的行为。原创 2024-06-21 11:16:51 · 841 阅读 · 0 评论 -
备忘录模式
(2)易于管理历史状态: 通过保存对象的多个备忘录,可以轻松地实现状态的回滚或切换到之前的某个状态,这对于需要保存用户操作历史或实现撤销/重做功能的系统来说非常有用。(2)可能泄露实现细节: 尽管备忘录模式可以保护对象的封装性,但如果备忘录的实现不小心暴露了过多的内部状态细节,那么这些细节可能会被不当地使用,从而破坏对象的封装性。使用备忘录模式,可以方便地实现这一功能。(1)封装性: 备忘录模式可以很好地支持对象的封装性,因为状态的保存和恢复都是在对象内部完成的,外部代码无法直接访问或修改对象的内部状态。原创 2024-06-19 11:13:48 · 1119 阅读 · 0 评论 -
命令 模式
此外,如果一个操作需要由多个子操作构成,而这些子操作需要被打包在一起作为一个单独的事务来执行,命令模式可以帮助实现这一功能。通过命令模式,遥控器和具体命令之间实现了解耦,可以很方便地扩展新的命令或修改命令的实现方式。命令模式的核心思想是通过命令对象来封装请求。总的来说,命令模式的应用场景主要在于解耦请求与实现,封装接收方具体命令的实现细节,使得请求方的代码架构稳定,具备良好的扩展性。4.队列请求:当需要将请求排队,例如用户界面中的点击事件或网络请求,命令模式可以将这些请求封装为对象并放入队列中等待处理。转载 2024-06-17 15:14:48 · 16 阅读 · 0 评论 -
责任链模式
参考原文:https://blog.csdn.net/h8062651/article/details/136639291。转载 2024-06-13 13:59:40 · 14 阅读 · 0 评论 -
外观 模式
原文链接:https://blog.csdn.net/h8062651/article/details/136546965。转载 2024-06-05 15:35:48 · 26 阅读 · 0 评论 -
组合 模式
3)难以限制组件类型:在组合模式中,组合对象可以包含其他组合对象或叶子对象。3)统一操作接口:组合模式定义了统一的操作接口,使得客户端可以一致地处理单个对象和组合对象,无需关心具体对象的类型。1)简化客户端代码:组合模式使得客户端可以统一对待单个对象和组合对象,无需区分它们的类型,从而简化了客户端的代码。(2)当你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就可以考虑组合模式;通过组合模式,我们可以以统一的方式管理和操作公司的组织结构,从而简化了代码的使用和维护。转载 2024-06-05 13:14:45 · 20 阅读 · 0 评论 -
桥接 模式
这种设计降低了类之间的耦合度,因为添加新的媒体播放器或媒体文件类型只需要创建新的实现类,而不需要修改桥接类或其他现有类。每种类型和分类的组合都需要创建一个新的类,导致类的数量剧增。而桥接模式可以将类型和分类分别抽象为两个独立的接口,并通过组合的方式将它们组合在一起,从而实现灵活的扩展。在这个例子中,桥接模式允许独立地扩展形状和颜色的类,而不需要为每一种形状和颜色的组合创建新的类。在 C++ 中,桥接模式通过将一个抽象部分与它的实现部分分离,使得它们可以独立地变化,从而降低了类之间的耦合度。转载 2024-06-04 16:06:26 · 21 阅读 · 0 评论 -
适配器模式
(可以把适配器模式理解成拓展坞,起到转接的作⽤,原有的接⼝是USB,但是客户端需要使⽤type-c , 便使⽤拓展坞提供⼀个type-c 接⼝给客户端使⽤)适配器模式Adapter 是⼀种结构型设计模式,它可以将⼀个类的接⼝转换成客户希望的另⼀个接⼝,主要⽬的是充当两个不同接⼝之间的桥梁,使得原本接⼝不兼容的类能够⼀起⼯作。不同的项⽬和库可能使⽤不同的⽇志框架,不同的⽇志框架提供的API也不同,因此引⼊了适配器模式使得不同的API适配为统⼀接⼝。类适配器通过多重继承实现,而对象适配器通过组合实现。原创 2024-05-30 14:57:54 · 964 阅读 · 0 评论 -
代理 模式
这里就可以运用代理模式,在打开文档时,并不打开图形对象,而是打开图形对象的代理以替代真实的图形。通过这种方式,被代理的对象(RealSubject)可以在运行时动态改变,需要控制的接口(Subject接口)可以在运行时改变,控制的方式(DynamicSubject类)也可以动态改变,从而实现了非常灵活的动态代理关系。在真实对象创建成功之前虚拟代理 扮演真实对象的替身,而当 真实对象创建之后,虚拟代理将用户的请求转发给真实对象。代理模式指代理控制对其他对象的访问,也就是代理对象控制对原对象的引⽤。原创 2024-05-28 15:02:49 · 1036 阅读 · 0 评论 -
观察者模式Observer
例子:基于同一组数据,生成了很多不同的界面来显示,有曲线图显示方式,有圆饼图显示方式,有柱状图显示方式等等…,当底层数据发生改变时,所有基于同一组数据的图像显示都需要修改图像,那么此时有两种实现方式所有图形界面模块都去观察底层数据是否做了改变,如果变化,那么读取数据,修改图像显示。原创 2024-05-28 10:18:58 · 669 阅读 · 0 评论 -
工厂 模式
工厂模式分为三种(简单工厂模式,工厂方法模式,抽象工厂模式)参考原文链接:https://blog.csdn.net/flyingcloud6/article/details/131352604一、为什么要使用工厂模式?主要是对对象的创建进行了一个封装;因此也属于创建型模式。定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决接口选择的问题。一个调用者想创建一个对象,只要知道其名称就可以了;原创 2024-03-07 16:32:32 · 999 阅读 · 0 评论 -
单例模式(C++)
单例模式原创 2023-03-14 15:34:21 · 2530 阅读 · 0 评论