
C++/C# 设计模式
文章平均质量分 87
介绍23种设计模式的原理,以及C++/C#代码的实现,提供全部源码。
优惠券已抵扣
余额抵扣
还需支付
¥15.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
令狐掌门
C++程序员,出版过《C++零基础入门视频教程》、《Qt高级进阶视频教程》、《C++ Qt6 QtQuick/QML入门进阶视频教程》、《OBS源码分析与桌面录制视频教程》、《PyQt PySide6零基础入门与项目实战》。
展开
-
设计模式GOF23简介
公元1991年,软件界有四位大侠,总结了前人的一些设计模式,并进行分门别类,一共得出23种设计模式供软件开发者进行参考复用,在经过几代人的开发实践后,设计模式在各个项目中大放光彩,这四位大侠是Gamma, Helm, Johnson & Vlissides,Addison-Wesley, 全地球程序员为了表示对设计模式的敬仰与崇拜,因此设计模式又称为GOF23。 设计模式主要有三大类,23小类,就像少林七十二绝技,各种招式技法都有,但是在项目中却不那么好用,需要有敏...原创 2020-11-13 23:52:44 · 457 阅读 · 0 评论 -
C#设计模式教程(24):访问者模式
访问者模式是一种行为设计模式,它允许你在不修改已有类的情况下,增加新的操作。这是通过创建一个外部的访问者类来实现的,它实现了对组件类每一个具体元素的操作。原创 2024-01-25 08:15:00 · 193 阅读 · 0 评论 -
C#设计模式教程(23):模板方法模式
模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架,将一些步骤延迟到子类中实现。这样可以在不改变算法结构的情况下,在子类中重新定义算法的某些特定步骤。原创 2024-01-25 07:30:00 · 210 阅读 · 0 评论 -
C#设计模式教程(22):策略模式
策略模式(Strategy Pattern)是一种行为设计模式,它定义了算法族,分别封装起来,让它们之间可以互相替换。策略模式让算法的变化独立于使用算法的客户。这种模式非常适合用于有多种运行算法的场景,在这些场景中,算法可能在运行时被选择或者切换。原创 2024-01-24 08:00:00 · 123 阅读 · 0 评论 -
C#设计模式教程(21):状态模式
状态模式(State Pattern)是一种行为设计模式,允许一个对象在其内部状态改变时改变其行为。这个对象看起来好像修改了它所属的类。状态模式主要用于实现状态机,在状态的逻辑复杂,状态数量较多,且状态转换规则较为明确的情况下,状态模式能够将各种状态的行为分离到不同的类中,提高可维护性。原创 2024-01-24 07:30:00 · 316 阅读 · 0 评论 -
C#设计模式教程(20):观察者模式
观察者模式(Observer Pattern)是一种常用的设计模式,允许一个对象(称为“观察者”)订阅另一个对象(称为“主题”或“可观察对象”)的状态变化,并在状态改变时得到通知。这种模式在实现事件处理系统、数据更新通知等场景中非常有用。原创 2024-01-24 07:15:00 · 486 阅读 · 0 评论 -
C#设计模式教程(19):备忘录模式
备忘录模式(Memento Pattern)是一种行为设计模式,允许在不暴露对象实现细节的情况下捕获并保存对象的当前状态,以便可以在未来的某个时刻恢复到这个状态。这种模式在进行需要撤销操作的应用程序时非常有用,比如文字处理器、游戏的保存和加载、数据库事务的回滚等。发起人(Originator):这是我们希望保存其状态的对象。备忘录(Memento):一个用于存储发起人状态的对象。负责人(Caretaker):负责保存备忘录,但不对备忘录的内容进行操作或检查。原创 2024-01-23 09:22:49 · 289 阅读 · 0 评论 -
C#设计模式教程(18):中介者模式
中介者模式(Mediator Pattern)是一种行为设计模式,它允许一组对象相互通信,而不需要知道彼此的内部结构。这样做可以降低多个对象和类之间的通信复杂性,将多对多的通信转变为一对多的通信,使得对象之间的耦合松散,并且可以更容易地独立地改变和复用这些对象。Mediator:定义了一个接口,用于与各个Colleague(同事)对象通信。:实现Mediator接口并协调各个Colleague对象之间的交互。Colleague。原创 2024-01-23 09:22:05 · 184 阅读 · 0 评论 -
C#设计模式教程(17):迭代器模式
迭代器模式(Iterator Pattern)是一种设计模式,用于提供一种方法顺序访问一个聚合对象中各个元素,而又无需暴露该对象的内部表示。迭代器模式把迭代的责任交给迭代器对象,而不是聚合对象,简化了聚合类。在C#中,迭代器模式通常是通过实现和接口来创建的。这种方法与C#的foreach循环和LINQ查询紧密集成。原创 2024-01-23 09:21:42 · 353 阅读 · 0 评论 -
C#设计模式教程(16):解释器模式
解释器模式是一种设计模式,用于定义一种语言的文法,并建立一个解释器来解释该语言中的句子。抽象表达式(Abstract Expression):定义解释操作的接口,通常是一个抽象类或接口。具体表达式(Concrete Expression):实现抽象表达式中定义的接口。每一种规则都对应于一个具体的表达式类。上下文(Context):包含解释器之外的一些全局信息。客户端(Client):构建(或被给定)一个特定的语言句子,然后解释这个句子。原创 2024-01-22 09:41:52 · 232 阅读 · 0 评论 -
C#设计模式教程(15):命令模式
命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求、队列或日志请求来参数化其他对象。同时支持可撤销操作。Command- 定义命令的接口。- 具体命令实现Command接口,定义了动作和接收者之间的绑定关系。Invoker- 请求的发送者,负责调用命令对象执行请求。Receiver- 接收者,执行与请求相关的操作。Client- 创建具体命令对象并设置其接收者。原创 2024-01-22 09:41:28 · 285 阅读 · 0 评论 -
C#设计模式教程(14):责任链模式
责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许多个对象处理一个请求,或者将这些对象连成一条链。在这条链上的每个对象会决定它能处理这个请求还是将其传递给链上的下一个对象。在C#中实现责任链模式,通常会有一个抽象处理者(Handler)角色,定义了一个处理请求的接口,以及一个或多个具体处理者(ConcreteHandler)角色,它们处理请求或将请求传递给链上的下一个处理者。原创 2024-01-22 09:41:02 · 137 阅读 · 0 评论 -
C#设计模式教程(13):代理模式
C#中的代理模式是一种结构型设计模式,它允许通过代理对象控制对另一个对象的访问。代理通常充当客户端和实际对象之间的中介,可以在访问实际对象前后执行一些额外的操作。代理模式有多种类型,其中包括虚拟代理、远程代理、保护代理等。原创 2024-01-21 15:36:52 · 187 阅读 · 0 评论 -
C#设计模式教程(12):享元模式
享元模式(Flyweight Pattern)是一种用于性能优化的设计模式,主要用于减少创建对象的数量,以减少内存占用和提高性能。这种模式特别适用于大量对象的情况,其中对象的大部分状态可以被外部化或共享。: 定义一个接口,声明那些可以被外部状态所影响的方法。: 实现Flyweight接口,并能接受并使用外部状态。: 负责创建和管理flyweight对象。当客户端请求一个flyweight时,Flyweight Factory对象提供一个已创建的实例或者创建一个(如果不存在的话)。Client。原创 2024-01-21 15:36:22 · 110 阅读 · 0 评论 -
C#设计模式教程(11):外观模式
外观模式(Facade Pattern)是一种常用的设计模式,其主要目的是提供一个统一的接口来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更加容易使用。原创 2024-01-21 15:35:48 · 85 阅读 · 0 评论 -
C#设计模式教程(10):装饰器模式
装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许用户在不修改现有对象结构的情况下,动态地给一个对象添加额外的职责。这种模式创建了一个装饰类,用来包装原有的类。这种模式创建了一个装饰类,用于包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。组件接口(Component):定义一个对象接口,可以给这些对象动态地添加职责。具体组件(ConcreteComponent):定义了一个对象,可以给这个对象添加一些额外的职责。装饰抽象类(Decorator)原创 2024-01-20 13:55:12 · 409 阅读 · 0 评论 -
C#设计模式教程(9):组合模式
组合模式(Composite Pattern)是一种结构型设计模式,用于以树形结构表示部分整体层次。通过这种方式,客户端可以统一对待单个对象和组合对象。这种模式对于表示和管理层级结构非常有用。原创 2024-01-20 13:54:56 · 198 阅读 · 0 评论 -
C#设计模式教程(8):桥接模式
桥接模式(Bridge Pattern)是一种结构型设计模式,它的目的是将抽象部分与实现部分分离,使它们可以独立地变化。在桥接模式中,抽象部分通常定义高层的逻辑,而实现部分提供底层的操作,抽象部分通过一个引用关联到实现部分。这种分离的主要好处是可以独立地管理抽象和实现,这样当系统的一个部分改变时,不会影响到另一个部分。这种模式非常适合于在多个维度上变化的系统,例如,不同的界面(抽象)和多平台的支持(实现)。原创 2024-01-20 13:54:32 · 128 阅读 · 0 评论 -
C#设计模式教程(7):适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口之间能够相互合作。适配器的作用是解决那些因接口不兼容而不能一起工作的类的问题,它通过包装一个类的接口转换成另一个期望的接口。原创 2024-01-19 23:04:57 · 291 阅读 · 0 评论 -
C#设计模式教程(6):原型模式(Prototype Pattern)
原型模式(Prototype Pattern)是一种创建型设计模式,其核心思想是通过复制现有对象来创建新对象,而不是通过实例化的方式。在C#中,这通常是通过实现ICloneable接口来完成的,该接口要求实现一个Clone方法,用于复制对象。原创 2024-01-19 23:04:36 · 428 阅读 · 0 评论 -
C#设计模式教程(5):建造者模式
建造者模式(Builder Pattern)是一种创建型设计模式,它允许你创建复杂对象的步骤分离,这样你可以使用相同的创建过程生成不同的表示。建造者模式通常用于处理那些包含多个成员变量的类,特别是当这些成员变量需要经过复杂步骤构建或者有大量可选参数时。原创 2024-01-19 23:04:15 · 230 阅读 · 0 评论 -
C#设计模式教程(4):单例模式
单例模式(Singleton Pattern)是一种常用的设计模式,用于确保一个类只有一个实例,并提供一个访问它的全局访问点。在C#中实现单例模式通常有几种不同的方法,这里介绍几种典型的实现方式。原创 2024-01-18 21:50:06 · 427 阅读 · 0 评论 -
C#设计模式教程(3):抽象工厂模式
抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建一系列相关或相互依赖对象的家族,而无需指定它们具体的类。这种模式是工厂方法模式的一种扩展,它用于创建的不是一个产品,而是多个产品的家族。原创 2024-01-18 21:49:39 · 284 阅读 · 0 评论 -
C#设计模式教程(2):工厂方法模式
工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。原创 2024-01-18 21:49:11 · 273 阅读 · 0 评论 -
C#设计模式教程(1):简单工厂模式
在C#中,工厂模式可以分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。IFactoryIProductIFactory这三种工厂模式都有各自的应用场景和优劣势,选择使用哪种取决于具体的需求和设计目标。简单工厂模式适用于对象较少,创建逻辑简单的情况;工厂方法模式适用于需要创建一类产品,但具体的产品种类由子类决定的情况;抽象工厂模式适用于创建一系列相关的产品族,并且系统不依赖于它们的具体类时。原创 2024-01-18 21:48:40 · 510 阅读 · 0 评论 -
C++ 设计模式1、2:工厂模式、抽象工厂模式
我们先看工厂模式的介绍这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。简单来说,使用了C++多态的特性,将存在继承关系的类,通过一个工厂类创建对应的子类(派生类)对象。在项目复杂的情况下,可以便于子类对象的创建。工厂模式的实现方式可分别简单工厂模式、工厂方法模式、抽象工厂模式,每个实现方式都存在优和劣。1、简单工厂模式假想你是一个温州鞋老板,资金不多,代理.原创 2020-11-08 23:54:53 · 630 阅读 · 0 评论 -
C++ 设计模式3:单例模式
单例 Singleton 是设计模式的一种,其特点是只提供唯一一个类的实例,具有全局变量的特点,在任何位置都可以通过接口获取到那个唯一实例;具体运用场景如:设备管理器,系统中可能有多个设备,但是只有一个设备管理器,用于管理设备驱动;数据池,用来缓存数据的数据结构,需要在一处写,多处读取或者多处写,多处读取;原创 2020-04-12 14:38:18 · 2163 阅读 · 0 评论 -
C++设计模式4:建造者模式
建造者模式,又称为builder模式。定义:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示 。使用场景:当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式。使用建造者模式有什么好处:建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了 该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。代码实现:#include<string>#include&.原创 2020-11-08 23:57:09 · 518 阅读 · 0 评论 -
C++设计模式5:原型模式
定义:Prototype 模式, 用原型实例来指定出创建对象的总类,并且通过拷贝这些原型来创建新的对象。使用场景1.当一个系统应该独立于它的产品创建、构成和表示的时候; 2.当要实例化的类是在运行时刻指定的时候,如通过动态加载; 3.为了避免创建一个与产品类层次平行的工厂类层次时; 4.当一个类的实例只能有几个不同状态组合中的一种时。代码实现以电脑的生产来说,利用原型模式的概念,来分别生产不同品牌的电脑;该模式的主要特点是针对一个多个相似对象的情况,提供一个快速生成对象的方式。例如在本例原创 2020-11-08 23:58:54 · 631 阅读 · 0 评论 -
C++ 设计模式6:适配器模式
什么是适配器模式? 适配器它是主要作用是将一个类的接口转换成客户希望的另外一个接口这样使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器模式有两种:1.类的适配器 2.对象适配器,对象适配器更多一些。代码示例#include <iostream>using namespace std;//目标接口class CTarget{public: CTarget() {} virtual ~CTarget() {} vi...原创 2020-11-08 23:51:09 · 471 阅读 · 0 评论 -
C++设计模式7:桥接模式
桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分和实现部分分离,使它们可以独立地变化。这种模式通过将继承关系转化为组合关系来解决类间的耦合问题。在桥接模式中,抽象部分由一个抽象类或接口来定义,它包含了一些抽象方法和属性,这些方法和属性需要由具体的实现类来实现。而实现部分则由一个实现类或接口来定义,它也包含了一些实现方法和属性,这些方法和属性需要被抽象部分调用。桥接模式的核心思想就是将抽象部分和实现部分分离,使它们可以独立地变化。原创 2023-04-25 06:00:00 · 400 阅读 · 1 评论 -
C++设计模式8:组合模式
组合模式是一种结构型设计模式,它将对象组织成树形结构以表示“部分-整体”的层次结构,使得用户可以以一致的方式处理单个对象和对象组合。在组合模式中,有两种类型的对象:叶子对象和组合对象。叶子对象是指没有子对象的对象,而组合对象则是具有子对象的对象。这些对象被组织成一个树形结构,其中组合对象作为父节点,而叶子对象作为子节点。这种层次结构可以无限扩展。组合模式可以让我们更方便地处理复杂对象的组合和操作。它提供了一种统一的方式来访问和管理对象集合,无论这些对象是单个对象还是对象的组合。原创 2023-04-25 21:04:40 · 600 阅读 · 0 评论 -
C++设计模式9:装饰器模式
装饰器模式(Decorator Mode), 别名,包装器Wraaper.装饰器模式的作用是为了实现动态的给对象添加职能,即从外部给对象添加相关职能。可以这样理解,比如说一个Person类,该类的操作有能吃、能睡、能跑、但假如随着人类的进化,某一天Person能飞了,能瞬移了等等,按照一般的写法是修改Person这个类,给这个类添加上能飞,能游等操作,但是这样破坏了面向对象的开放-封闭原则, 且随着人类的进化这个类就会变得越来越臃肿,越来越复杂,添加任何一个功能都必须对这个臃肿的类进行修改,出错的概率大原创 2021-04-11 15:31:15 · 428 阅读 · 0 评论 -
C++ 设计模式10:外观模式
外观模式又称为Facade,为子系统中的一组接口(相当与上面的模块)提供一个一致的界面。此模式定义了一个高层接口,这个结口使得这一子系统更加easy使用。 我们仅仅需调用高层的函数接口。而不用关心高层内部调用是怎样组合底层方法的。更不用关心底层函数是怎样实现的。 例如,我们须要完成两个工作,要完毕工作1我们须要依次完成子工作Sub_Work1、Sub_Work3;要完成工作2我们须要依次完成子工作Sub_Work2,Sub_Work3,Sub_Work4。为了能让用户与这些子工作分离,我们採原创 2021-04-11 22:03:26 · 396 阅读 · 0 评论 -
C++设计模式11:享元模式
享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享对象来减少内存使用和提高性能。在该模式中,我们将需要共享的对象(如字母、数字、图形等)抽象成一个对象接口,然后通过工厂类来维护这些对象的唯一实例,并在需要的时候进行共享,避免了重复创建大量的对象。享元模式的核心思想是将一个对象的状态分成内部状态和外部状态。内部状态是可以共享的,而外部状态则需要通过参数传递进来。对于相同的内部状态,享元模式只会创建一次实例,并在需要的时候进行共享,从而节约了内存空间。原创 2023-04-26 08:00:00 · 567 阅读 · 0 评论 -
C++ 设计模式12:代理模式
代理模式(PROXY),也称为委托模式,作用就是找一个对象来替我们访问某个对象,就像租房子,需要找中介,中介就是属于代理。 租房子模型#include <iostream>#include <string>using namespace std;class Person{public: virtual void rentHouse() = 0;};class Mike :public Person{public: void rentH原创 2021-04-11 21:55:46 · 849 阅读 · 3 评论 -
C++设计模式13:责任链模式
责任链模式(Chain of Responsibility)是一种行为设计模式,它允许你将请求沿着处理者链进行发送,直到其中一个处理者对其进行处理。原创 2023-04-24 21:27:44 · 526 阅读 · 0 评论 -
C++设计模式14:命令模式
命令模式(Command)是一种行为型设计模式,它将请求封装成一个对象,从而允许您将不同的请求参数化,并将客户端代码与具体的请求解耦。这种模式的核心思想是将请求的发送者和接收者分离,从而使它们可以独立地变化。在命令模式中,有四个主要的角色:命令接口、具体命令、调用者和接收者。命令接口定义了所有具体命令都必须实现的方法,而具体命令则实现了这些方法,并将一个接收者对象绑定到了自己身上。调用者对象负责将具体命令对象传递给接收者对象,并在需要的时候调用具体命令对象的方法。接收者对象则执行具体命令对象所定义的操作。原创 2023-04-28 20:51:57 · 1632 阅读 · 1 评论 -
C++设计模式15:解释器模式
解释器模式是一种行为型设计模式,它定义了一种语言和解释器,用于解释语言中的表达式。该模式中,每个表达式都表示为一个类,这些类可以进行相互组合,以形成更复杂的表达式。解释器会递归地解释这些表达式,并将它们转换为具体的操作或值。在这个过程中,解释器可以维护一个上下文,用于跟踪表达式的状态。解释器模式常常用于需要解释和执行某种语言的场景,如编译器、计算器、查询语言等。该模式可以将语言和解释器分离开来,从而使语言的扩展和修改变得更加容易。原创 2023-04-27 08:00:00 · 524 阅读 · 1 评论 -
C++设计模式16:迭代器模式
迭代器模式是一种行为型设计模式,它允许你在不暴露集合底层表现形式(列表、栈和树等)的情况下遍历集合中所有的元素。迭代器模式通过提供一个迭代器来实现这一点,该迭代器用于跟踪集合中的当前元素,并知道如何遍历到下一个元素。在迭代器模式中,集合类通常会实现一个名为 iterator 的方法,该方法返回一个迭代器对象。迭代器对象通常会实现两个方法:next 和 hasNext。next 方法返回集合中的下一个元素,而 hasNext 方法则用于检查是否还有更多的元素需要遍历。原创 2023-04-28 06:00:00 · 1301 阅读 · 0 评论