![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式
设计模式介绍
小激动. Caim
一名Qter
展开
-
设计模式23之c++访问者模式(含示例代码)
通过将访问者的操作分离出来,我们可以在不同的元素上实现不同的操作,从而增加了代码的灵活性和可扩展性。但是,访问者模式也可能导致代码的复杂度增加,因为我们需要定义访问者接口、具体访问者和抽象元素,从而增加了代码的数量。在上面的代码中,我们首先定义了一个抽象访问者 Visitor,它定义了对各种具体元素进行访问的接口。最后,在 main() 函数中,我们创建了对象结构和访问者对象,向对象结构中添加具体元素对象,让访问者访问对象结构中的元素,并输出访问的结果。原创 2023-05-09 10:00:00 · 106 阅读 · 0 评论 -
设计模式22之c++模板方法模式(含示例代码)
通过将算法的骨架和一些基本操作抽象出来,我们可以在不同的具体类中实现基本操作,从而实现代码的复用。同时,模板方法模式也可以使得算法的实现更加灵活,因为我们可以通过继承来改变基本操作的实现。在上面的代码中,我们首先定义了一个抽象类 AbstractClass,它定义了算法的骨架和一些基本操作。在 main() 函数中,我们创建了 ConcreteClassA 和 ConcreteClassB 的实例,然后调用它们的模板方法 TemplateMethod(),输出两个具体类中实现的基本操作。原创 2023-05-08 10:00:00 · 153 阅读 · 0 评论 -
设计模式21之c++策略模式(含示例代码)
在 main() 函数中,我们创建了两个具体策略对象 strategy_a 和 strategy_b,并将 strategy_a 作为初始策略,然后创建了一个上下文对象 context,并调用它的接口 Execute() 输出 “Concrete Strategy A”。在上面的代码中,我们首先定义了一个抽象策略类 Strategy,它定义了所有具体策略类的接口。最后,我们定义了一个上下文类 Context,它维护了一个具体策略类的实例,并定义了一个接口供外部调用。原创 2023-04-27 10:30:00 · 299 阅读 · 0 评论 -
设计模式20之c++状态模式(含示例代码)
在 main() 函数中,我们创建了两个具体状态对象 state_a 和 state_b,并将 state_a 作为初始状态,然后创建了一个上下文对象 context,并调用它的接口 Request() 输出 “Concrete State A”。在上面的代码中,我们首先定义了一个抽象状态类 State,它定义了所有具体状态类的接口。最后,我们定义了一个上下文类 Context,它维护了一个具体状态类的实例,并定义了一个接口供外部调用。但是,状态模式可能会导致类的数量增加,从而增加了代码的复杂度。原创 2023-04-17 11:30:00 · 150 阅读 · 0 评论 -
设计模式19之c++观察者模式(含示例代码)
接着,我们修改了主题对象的状态,并通知观察者。在上面的代码中,我们首先定义了一个抽象主题类 Subject 和抽象观察者类 Observer,分别定义了添加、删除和通知观察者的接口和更新的接口。接着,我们创建了一个具体主题类 ConcreteSubject,它维护了一个观察者列表,并实现了添加、删除和通知观察者的接口。观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象状态发生改变时,它会通知所有观察者对象,使它们能够自动更新自己。原创 2023-04-16 11:30:00 · 353 阅读 · 0 评论 -
设计模式18之c++备忘录模式(含示例代码)
在上面的代码中,我们首先定义了一个 Memento 类,用于保存对象的状态。在 main() 函数中,我们创建一个发起人对象 originator,修改它的状态,并创建了两个备忘录。备忘录模式的优点在于它可以隔离对象的内部状态,并将状态保存在外部对象中,从而避免了对象暴露其内部状态给其他对象。但是,由于备忘录对象需要保存对象的状态,因此它可能会占用大量的内存空间。备忘录模式是一种行为型设计模式,它允许将对象的内部状态保存在外部对象中,并在需要时恢复该状态。备忘录模式可以用于实现撤销、恢复、快照等应用。原创 2023-04-15 11:30:00 · 219 阅读 · 0 评论 -
设计模式17之c++中介者模式(含示例代码)
在上面的代码中,我们首先定义了一个 Mediator 抽象类,其中包含了 Send() 纯虚函数。具体同事类 User 实现了 Receive() 和 Send() 函数,以与聊天室中的其他用户交互。在 main() 函数中,我们首先创建了一个聊天室对象 chat_room,然后创建了三个用户对象 alice、bob 和 charlie,并将它们注册到聊天室中。接着,我们设置了用户对象的中介者为聊天室。中介者模式是一种行为型设计模式,它通过将对象之间的通信转发给中介者对象,从而解耦了对象之间的相互作用。原创 2023-04-14 11:30:00 · 145 阅读 · 0 评论 -
设计模式16之c++迭代器模式(含示例代码)
在上面的代码中,我们首先定义了一个 Iterator 抽象类,其中包含了 Next() 和 HasNext() 纯虚函数。在 main() 函数中,我们首先创建了一个向量聚合对象 vector_aggregate,然后通过 CreateIterator() 函数创建了向量迭代器对象 iterator,最后遍历向量并输出结果。迭代器模式的优点在于它将遍历算法与聚合对象分离,使得聚合对象的内部表示不会被暴露。同时,迭代器模式也提供了一种通用的遍历接口,使得遍历算法可以轻松地应用于不同的聚合对象上。原创 2023-04-13 11:30:00 · 132 阅读 · 0 评论 -
设计模式15之c++解释器模式(含示例代码)
在上面的代码中,我们首先定义了一个 Expression 抽象类,其中包含了一个 Interpret() 纯虚函数。Interpreter 类是解释器类,它将输入的表达式转化为语法树,并提供 Interpret() 函数用于解释表达式。在 main() 函数中,我们首先构建了一个语法树,然后构建了一个环境,并将环境传递给解释器,最后计算表达式并输出结果。是一种行为型设计模式,它定义了一种语言文法,并且定义了一个解释器,用来解释这种语言中的表达式。解释器模式可以用于实现编译器、数学公式计算器等应用。原创 2023-04-11 12:30:00 · 298 阅读 · 0 评论 -
设计模式14之c++命令模式(含示例代码)
PrintCommand 和 AddCommand 是具体的命令类,它们分别实现了 Execute() 函数,以完成具体的命令操作。在 main() 函数中,我们首先创建了两个具体的命令对象,然后创建了一个命令调用者对象。命令模式是一种行为型设计模式,它将请求封装成对象,从而允许你使用不同的请求、队列或者日志请求来参数化其他对象。Invoker 类是命令调用者,它有一个 SetCommand() 函数用于设置命令,以及一个 ExecuteCommand() 函数用于执行命令。原创 2023-04-10 10:30:00 · 133 阅读 · 0 评论 -
设计模式13之c++职责链模式(含示例代码)
C++ 职责链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许你将请求沿着处理者链进行传递,直到其中一个处理者能够处理它为止。原创 2023-04-09 11:00:00 · 125 阅读 · 0 评论 -
设计模式12之c++代理模式(含示例代码)
Proxy 是代理,它包含一个指向真正主题的指针,并实现了 request 方法来控制对真正主题的访问。在 request 方法中,代理首先通过 checkAccess 方法检查访问权限,然后调用真正主题的 request 方法,并最终通过 logAccess 方法记录访问日志。代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理,以控制对这个对象的访问。在使用代理模式时,需要考虑代理和真正主题的接口一致性和兼容性,避免出现不兼容的情况。原创 2023-04-02 13:30:00 · 203 阅读 · 0 评论 -
设计模式11之c++享元模式(含示例代码)
在这个示例中,ConcreteFlyweight 表示具体的共享对象,它包含一个 state_ 成员变量来表示对象的状态。在 getFlyweight 方法中,如果需要的共享对象已经存在,那么直接返回它;否则,创建一个新的共享对象并将其保存到哈希表中,然后返回它。这样可以避免重复创建相同的对象,从而减少内存使用和提高性能。在使用享元模式时,需要考虑对象的可共享性和不可共享性,避免共享不应该共享的对象。在实现中,可以使用对象池技术来减少对象的创建和销毁次数,从而提高性能。原创 2023-04-02 11:30:00 · 110 阅读 · 0 评论 -
设计模式10之c++外观模式(含示例代码)
外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口,隐藏了一个或多个复杂的子系统的复杂性,使客户端可以更容易地使用这些子系统。方法调用子系统中的方法,从而向客户端提供了一个简单的接口。的方法即可使用子系统,而无需关心其复杂性。上述示例中,我们有两个子系统。原创 2023-04-01 08:12:02 · 176 阅读 · 0 评论 -
设计模式9之c++装饰器模式(含示例代码)
装饰器模式(Decorator Pattern)是一种结构型设计模式。它允许你通过将对象包装在一个装饰器类的实例中来动态地修改对象的行为。装饰器模式允许你在运行时动态地向对象添加功能,而不是在编译时就确定好。装饰器模式适合于需要在运行时动态地为对象添加新的行为时使用。使用装饰器模式会增加许多小类,可能会导致代码比较难以维护。装饰器模式避免了使用继承扩展对象功能时带来的类爆炸问题。装饰器模式会增加许多请求处理的复杂度。装饰器模式使得添加新功能变得方便。原创 2023-03-31 16:38:43 · 229 阅读 · 0 评论 -
设计模式8之c+组合模式的使用和优化
在组合模式中,有两种基本类型的对象:叶子节点和组合节点。叶子节点表示不能再被分解的对象,而组合节点表示由若干子节点组成的复杂对象。组合节点可以包含叶子节点和其他组合节点,从而构造出一棵树形结构。组合模式是一种结构型设计模式,它以树形结构来组合对象,以达到表示部分-整体的层次结构,并且可以使客户端统一处理单个对象和组合对象。是组合节点,它维护一个子节点的列表,并实现了。是组合模式中的组件类,它包含了一个操作方法。,该方法在叶子节点和组合节点中被不同实现。方法,输出整个树形结构的操作结果。原创 2023-03-27 21:59:21 · 210 阅读 · 0 评论 -
设计模式7之c++桥接模式(示例代码)
桥接模式适用于抽象和实现部分的变化频繁,且需要独立变化的场景。但是在系统较小或实现部分和抽象部分不会发生变化的情况下,使用桥接模式可能会增加代码的复杂度,不建议使用。原创 2023-03-23 09:00:00 · 129 阅读 · 0 评论 -
设计模式6之c++适配器模式(示例代码)
(Adapter Pattern)是一种结构型设计模式,它将一个类的接口转换成客户端所期望的另一种接口,从而使原本因接口不兼容而无法一起工作的类能够在一起工作。原创 2023-03-19 08:49:13 · 192 阅读 · 0 评论 -
设计模式2之c++抽象工厂模式(示例代码)
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。在抽象工厂模式中,一个工厂类可以创建多个产品族,每个产品族包含多个产品。原创 2023-03-17 17:27:41 · 593 阅读 · 0 评论 -
设计模式5之c++原型模式(示例代码)
复制构造函数是一个特殊的构造函数,它接受一个相同类型的对象作为参数,并使用该对象的成员变量来初始化新对象的成员变量。复制方法是一个成员函数,它接受一个相同类型的对象作为参数,并使用该对象的成员变量来初始化新对象的成员变量。在main函数中,我们首先创建一个ConcretePrototype对象,将其打印出来,然后使用clone方法创建一个克隆对象,并将其打印出来。原型模式是一种创建型设计模式,它允许通过克隆现有对象来创建新对象,而不是通过创建新的对象并初始化它们来创建对象。原创 2023-03-17 17:12:09 · 166 阅读 · 0 评论 -
设计模式4之c++建造者模式(示例代码)
建造者模式(Builder Pattern)是一种创建型设计模式,用于将一个复杂对象的构建过程和表示分离,使得同样的构建过程可以创建不同的表示。在 C++ 中实现建造者模式,通常需要定义一个抽象的建造者接口和具体的建造者类,以及一个具体的产品类和一个指挥者类。最后,我们将构建完成的产品传递给具体的产品对象。定义了构建产品的方法,具体的建造者类。方法返回构建完成的产品。定义了产品的属性和方法,指挥者类。在上面的示例中,抽象的建造者接口。函数中,我们首先创建一个。对象,然后调用指挥者的。负责构建产品的过程。原创 2023-03-17 17:00:17 · 345 阅读 · 0 评论 -
设计模式3之c++单例模式(示例代码)
在这个示例中,我们将构造函数私有化,以防止外部创建实例。getInstance()方法返回单例实例的唯一全局访问点。当第一次调用getInstance()方法时,它将创建一个新实例,然后返回它。在后续调用中,它只是简单地返回先前创建的实例。在main()函数中,我们创建两个Singleton实例,但由于它是单例类,它们实际上是同一个实例。C++中的单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。原创 2023-03-17 02:00:00 · 184 阅读 · 0 评论 -
设计模式1之c++工厂方法模式(示例代码)
客户端代码根据需要创建不同类型的图形对象,通过调用工厂方法返回具体的产品对象。工厂方法模式是一种创建型设计模式,用于创建对象的过程,将实例化逻辑委托给子类处理。这样,可以将实例化过程与客户端进行解耦,从而更好地管理和维护代码。具体工厂类:实现了抽象工厂类中定义的工厂方法,返回一个具体产品类的实例。抽象工厂类:定义了一个工厂方法的接口,该方法返回一个抽象产品类的对象。抽象产品类:定义了所有具体产品类的公共接口,可以是一个抽象类或接口。具体产品类:实现了抽象产品类中定义的接口,是工厂方法模式创建的对象。原创 2023-03-16 21:06:05 · 144 阅读 · 0 评论 -
目录:什么是设计模式
是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式是为了重用代码,让代码更容易被他人理解,保证代码可靠性。不是一种技术,而是一种思想。设计模式不是代码,而是针对代码编写的通用解决方案。设计模式的核心思想是面向对象编程中的继承、多态、封装等思想。原创 2023-03-16 08:38:42 · 199 阅读 · 0 评论