【C++设计模式】
文章平均质量分 86
设计模式笔记
越甲八千
置身其中,全力以赴
展开
-
通俗的桥接模式
桥接模式(Bridge Pattern)是一种结构型设计模式,旨在将抽象与实现分离,使它们可以独立变化。通过组合而非继承的方式,桥接模式避免了类爆炸,增强了系统的灵活性和可扩展性。例如,在手机品牌与功能的场景中,桥接模式允许品牌与功能自由组合,而不是为每种组合创建新的子类。其核心思想是解耦抽象层与实现层,通过“桥”连接两者,从而支持多个维度的变化。该模式特别适用于需要支持多种平台、风格或功能的场景,符合“开闭原则”,减少代码重复,提升系统可维护性。原创 2025-05-11 00:09:03 · 641 阅读 · 0 评论 -
重温设计模式--13、策略模式
策略模式介绍C++ 代码示例策略模式是一种行为设计模式,它允许在运行时选择算法的行为。该模式将算法的定义和使用分离开来,使得算法可以独立于使用它的客户端而变化,提高了代码的灵活性和可维护性。抽象策略(Strategy):定义了一个公共接口,用于所有具体策略类实现,这个接口声明了算法的方法签名,客户端通过这个接口来调用具体的算法。具体策略(Concrete Strategy):实现了抽象策略接口,提供具体的算法实现逻辑。不同的具体策略类实现了不同的算法,可以根据具体需求进行替换。原创 2025-01-06 10:55:07 · 1401 阅读 · 0 评论 -
重温设计模式-1、前言+设计模式分类
设计模式1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。其实就是软件开发过程中的套路,参考这些前辈总结的套路能够大大提高我们的开发效率和开发质量。...原创 2020-11-16 20:05:08 · 1286 阅读 · 0 评论 -
重温设计模式--2、设计模式七大原则
软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这意味着当需要对软件系统进行功能扩展时,应该通过添加新的代码(类、模块、函数等)来实现,而不是修改已有的代码。所有引用基类(父类)的地方必须能透明地使用其子类的对象。也就是说,子类对象应该能够替换父类对象,并且程序的行为和结果不会发生改变。高层模块不应该依赖低层模块,两者都应该依赖抽象;抽象不应该依赖细节,细节应该依赖抽象。简单来说,就是要面向接口编程,而不是面向具体的实现编程。一个类应该只有一个引起它变化的原因。也就是说,一个类应该只负责一项职责。原创 2024-12-21 14:33:36 · 770 阅读 · 0 评论 -
重温设计模式--3、UML图
转载自:http://www.uml.org.cn/oobject/201905073.asp 感谢感谢作者;为了方便自己记忆模糊时查看举一个简单的例子,来看这样一副图,其中就包括了UML类图中的基本图示法。首先,看动物矩形框,它代表一个类(Class)。类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为...原创 2020-02-27 21:20:06 · 1212 阅读 · 1 评论 -
重温设计模式--4、组合模式
定义:组合模式是一种结构型设计模式,它允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。作用简化客户端代码:客户端可以统一地处理单个对象和对象组合,而不需要区分它们是单个的叶子节点还是包含多个子节点的组合节点。例如,在一个文件系统的表示中,客户端可以用相同的方式来处理文件(叶子节点)和文件夹(组合节点),如计算文件大小或显示文件/文件夹名称等操作。层次结构表示:能够很好地表示具有层次结构的对象关系。原创 2024-12-21 15:27:42 · 729 阅读 · 0 评论 -
重温设计模式--5、职责链模式
定义与概念职责链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它旨在将请求的发送者和多个接收者解耦,让多个对象都有机会处理请求,这些对象就像一条链一样依次传递请求,直到有一个对象能够处理该请求为止。如果某个对象不能处理请求,它会将请求转发给链上的下一个对象。例如,在一个员工请假审批系统中,员工提交请假申请后,可能先由小组长审批,如果请假天数较多,小组长无法审批,就会将申请转交给部门经理审批,若部门经理权限也不够,还可能继续往上传递给更高层领导审批。原创 2024-12-23 14:10:54 · 1103 阅读 · 0 评论 -
重温设计模式--6、享元模式
定义与概念享元模式(Flyweight Pattern)是一种结构型设计模式,它主要用于减少创建对象的数量,以节约内存空间并提高性能。其核心思想是通过共享尽可能多的对象状态来避免大量相似对象的重复创建,这些可以被共享的状态通常被称为内部状态,而每个对象特有的、不被共享的状态则称为外部状态。例如,在一个文字处理软件中,有很多字符需要显示,如果每个字符都单独创建一个完整的对象来表示(包含字体、字号、颜色等所有属性),那会占用大量内存。但实际上,很多字符可能字体、字号等属性是一样的,只有位置等少数属性不同。原创 2024-12-23 14:20:47 · 976 阅读 · 0 评论 -
重温设计模式--7、中介者模式
中介者模式是一种行为设计模式,它通过引入一个中介者对象来封装一系列对象之间的交互。中介者使得各个对象之间不需要显式地相互引用,从而降低了它们之间的耦合度,并且可以更方便地对它们的交互进行管理和协调。原创 2024-12-23 14:17:06 · 1294 阅读 · 0 评论 -
重温设计模式--8、命令模式
定义与概念命令模式属于行为型设计模式,它旨在将一个请求封装成一个对象,从而让你可以用不同的请求对客户端进行参数化,将请求的发送者和接收者解耦,并且能够方便地对请求进行排队、记录请求日志,以及支持可撤销的操作等。例如,在一个智能家居系统中,有各种电器设备(如灯、电视、空调等),而用户可以通过遥控器(类似调用者)发出各种操作指令(如开灯、关电视、调空调温度等,这些指令就是不同的命令),每个电器设备就是接收者,它们知道如何具体执行对应的操作。原创 2024-12-23 11:07:26 · 749 阅读 · 0 评论 -
重温设计模式--9、桥接模式
设计意图:桥接模式不是将两个不相干的类链接,而是将一个需要多维度变化的类拆分成抽象部分和实现部分,并且在抽象层对两者做组合关联,是用组合的方式来解决继承的问题。举个例子,如果一个类在两个维度分别有m和n种变化,采用继承的方式就需要扩展出m*n个子类,且一个维度每增加一种变化就多出另一个维度变化总数的子类;如果将两个维度拆分再组合,加起来也只有m+n个子类,且每个维度独立扩展,一个维度增加一种变化只需要增加1个子类。一般问题:一个类需要在两个以上维度扩展,采用继承方式会导致子类数量过多。原创 2024-12-23 10:44:50 · 1468 阅读 · 1 评论 -
重温设计模式--10、单例模式
定义单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。就像是在整个软件系统中,某个特定的对象只能有一个,并且各个部分都能方便地获取到这个唯一的对象。作用资源共享与协调:适用于管理一些全局的资源,比如数据库连接池。整个应用程序通常只需要一个数据库连接池实例来协调和管理数据库连接的分配与回收,避免创建多个连接池导致资源浪费和管理混乱。状态一致性维护:在某些场景下,需要保证整个系统中某个对象的状态是唯一且一致的。原创 2024-12-23 09:46:56 · 1391 阅读 · 0 评论 -
重温设计模式--11、迭代器模式
定义迭代器模式是一种行为型设计模式,它提供了一种方法来顺序访问一个聚合对象(如数组、列表、树等各种容器类型的数据结构)中的各个元素,而又无需暴露该聚合对象的内部表示。简单来说,就是将遍历数据结构的操作和数据结构本身分离开来,让遍历的逻辑更加独立和通用。作用解耦数据结构与遍历逻辑:使得数据结构(如容器类)的设计可以专注于存储和管理元素,而不用关心如何遍历这些元素。原创 2024-12-23 08:26:57 · 1197 阅读 · 0 评论 -
重温设计模式--备忘录模式
备忘录模式是一种行为型设计模式,它用于在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后可以将对象恢复到原先保存的状态。简单来说,就像是给对象的某个时刻的状态拍个 “快照”,之后可以根据这个 “快照” 让对象回到当时的样子。原创 2024-12-21 14:58:44 · 1179 阅读 · 0 评论 -
重温设计模式--适配器模式
解决接口不兼容问题:在软件开发过程中,经常会遇到需要使用一些现有的类,但这些类的接口与当前系统所期望的接口不一致的情况。除了这种类适配器的形式(通过继承来实现适配),还有对象适配器(通过组合的方式,将被适配者对象作为适配器类的成员变量,代码结构稍有不同,但核心思想一致),可根据具体的应用场景和设计需求来选择合适的实现方式。它实现了目标接口,同时在内部持有一个被适配者的实例,并通过调用被适配者的相关方法来实现目标接口中定义的方法,以此来完成接口的转换工作,使得客户端可以通过目标接口来间接使用被适配者的功能。原创 2024-12-21 13:46:39 · 1348 阅读 · 0 评论 -
重温设计模式--状态模式
定义:状态模式是一种行为型设计模式,它允许对象在其内部状态改变时改变它的行为。就好像对象看起来修改了它的类一样,通过将不同状态对应的行为封装到不同的状态类中,让一个对象在不同的状态下可以表现出不同的行为,而这些行为的切换是由对象的状态变化来驱动的。原创 2024-12-21 10:33:14 · 1175 阅读 · 0 评论 -
重温设计模式--观察者模式
支持一对多的依赖关系:一个主题可以有多个观察者关注它的状态变化,当主题状态更新时,能同时通知到所有相关的观察者,方便实现一些需要多方响应的业务场景,比如在一个股票交易系统中,当某支股票价格变化(主题状态改变),多个关注该股票的股民客户端(观察者)都能及时收到通知并做出相应决策。它定义了注册、移除观察者以及通知观察者等方法的接口,维护了一个观察者列表,用于记录所有注册的观察者对象,当自身状态改变时,通过调用通知方法来告知所有观察者。Subject是抽象主题,定义了注册、移除观察者以及通知观察者等相关接口。原创 2024-12-21 09:58:56 · 628 阅读 · 0 评论 -
重温设计模式--建造者模式
Director类作为指挥者,通过调用建造者的方法来协调完成电脑对象的构建过程,最终客户端代码(main函数中)可以方便地通过指挥者和不同的建造者配合,创建出不同配置的电脑对象,整个创建过程条理清晰,易于扩展和维护。实现了抽象建造者中定义的抽象方法,具体地来构建产品的各个部件,按照特定的逻辑和配置完成产品的组装,每个具体建造者可以创建出具有不同配置特点的产品。它负责指挥建造者进行对象的构建,通过调用建造者的相关方法来按顺序完成产品的创建过程,不过它并不关心具体的构建细节,只是协调构建步骤。原创 2024-12-21 08:54:11 · 1363 阅读 · 0 评论 -
重温设计模式--外观模式
外观模式是一种结构型设计模式,它为子系统中的一组接口提供了一个统一的高层接口,这个接口使得子系统更容易使用。外观模式隐藏了系统的复杂性,并向客户端提供了一个简单的接口,通过这个接口客户端可以访问系统的功能。外观模式本质上应了网络领域的一句名言。原创 2024-12-21 08:31:07 · 695 阅读 · 0 评论 -
重温设计模式--模板方法模式
新的子类可以选择性地重写模板方法中的步骤,以实现新的行为。例如,在一个图形绘制系统中,已经有了绘制基本图形(如圆形、矩形)的类,当需要添加一种新的图形(如三角形)时,只需要创建一个新的子类,重写绘制图形的具体步骤,而整体的图形绘制流程(如打开画布、选择颜色、绘制图形、关闭画布)可以复用已有的模板方法。例如,在一个游戏开发中,游戏角色的移动和攻击行为可能有共同的流程结构,通过模板方法模式可以把这个共同的流程提取出来,不同类型的角色(如战士、法师)可以复用这个流程,只需要实现自己特定的移动和攻击方式即可。原创 2024-12-20 22:44:19 · 467 阅读 · 0 评论 -
重温设计模式--原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象;核心中的核心就是 克隆clone ,后面讲原型模式是一种创建型设计模式,它的主要意图是通过复制现有的对象实例来创建新的对象,而不是通过传统的使用构造函数来初始化创建。原创 2024-12-20 22:25:21 · 696 阅读 · 0 评论 -
重温设计模式--工厂模式(简单、工厂、抽象)
工厂方法模式(Factory Method Pattern):在简单工厂模式上进行了改进,把具体产品对象的创建方法延迟到具体的工厂子类中实现,工厂类变成抽象类,有一个抽象的创建方法,每个具体的工厂子类负责创建对应的具体产品对象,符合开闭原则(对扩展开放,对修改关闭)。具体产品(Concrete Product):实现抽象产品族中的相应抽象产品类,代表具体的产品对象,不同的具体工厂创建不同组合的具体产品。工厂类(Factory):负责创建具体的产品对象,根据传入的条件或者参数决定实例化哪种具体产品。原创 2024-12-20 21:47:07 · 1530 阅读 · 0 评论 -
重温设计模式--代理模式
代理模式(Proxy Pattern)属于结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。通过引入代理对象,代理模式可以在目标对象的基础上,增加额外的功能,比如访问控制、懒加载、缓存等,同时对外界隐藏目标对象的实现细节,让调用者感觉好像是在直接与目标对象进行交互。原创 2024-12-20 21:20:46 · 902 阅读 · 0 评论 -
重温设计模式----装饰模式
动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式必生成子类更加灵活装饰模式(Decorator Pattern)属于结构型设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。装饰模式,其实可以理解为套娃,一层套一层。原创 2024-12-20 19:58:29 · 603 阅读 · 0 评论 -
重温设计模式-外观模式和适配器模式的异同
例如,目标接口有方法request(),被适配者有方法specificRequest(),适配器的request()方法内部会调用被适配者的specificRequest()方法并进行适当的转换来适配接口。它更像是一个一站式服务,通过一个简单的接口来封装一系列复杂的子系统操作,让客户端能够方便地使用子系统的功能,而不用关心子系统内部的细节和复杂的交互关系。外观类和子系统类之间是一种委托关系,外观类不改变子系统类的接口,只是将多个子系统类的操作组合起来,提供一个更方便的接口给客户端使用。原创 2024-12-21 14:01:34 · 699 阅读 · 0 评论 -
重温设计模式--代理、中介者、适配器模式的异同
文章目录1、相同点2. **不同点**1、相同点目的都是为了更好地处理对象之间的关系:这三种模式都是在软件设计中用于处理对象之间的关联和交互,以达到优化系统结构、增强可维护性等目的。它们都在一定程度上隐藏了对象之间的某些细节或者复杂性,使得系统的设计更加合理。都属于结构型设计模式:中介者模式、代理模式和适配器模式都归类于结构型设计模式。结构型设计模式主要关注如何将类或对象组合成更大的结构,以满足软件系统的需求。这三种模式通过不同的方式来组织和协调对象之间的关系,从而构建出更灵活、易于维护的系统架构。原创 2024-12-23 16:02:45 · 1087 阅读 · 0 评论 -
重温设计模式--C++迭代器种类和用法
它提供了一种方法来顺序访问一个聚合对象(如数组、列表、树等各种容器类型的数据结构)中的各个元素,而又无需暴露该聚合对象的内部表示原创 2024-12-23 09:07:43 · 1362 阅读 · 0 评论 -
简单工厂模式和策略模式的异同
简单工厂模式将对象创建逻辑集中在工厂类中,方便添加新的产品对象;策略模式将不同的算法封装在具体策略类中,便于添加新的策略。策略接口定义了算法方法,具体策略类实现这些方法,上下文类持有策略接口引用,用于调用具体策略类的算法。例如,在游戏角色的攻击行为中,可以有不同的攻击策略,如近战攻击、远程攻击等,根据游戏场景和角色状态来切换。在策略模式中,虽然重点是算法的封装和切换,但具体策略类也是对象,需要被创建。简单工厂模式通常有一个工厂类,包含一个创建对象的方法,根据传入的参数返回不同类型的产品对象。原创 2024-12-20 14:18:27 · 1143 阅读 · 0 评论 -
简单工厂模式VS策略模式
简单工厂模式VS策略模式原创 2023-07-28 17:33:50 · 817 阅读 · 0 评论 -
简单工厂模式和策略模式的区别
学习了设计模式就会发现,简单工厂模式和策略模式的UML几乎是一样的,那两者的却别到底是什么呢,搜集资料,加上个人理解整理如下:1、简单工厂模式中只管创建实例,具体怎么使用工厂实例由调用方决定,他只负责创建具体对象;2、策略模式是将生成实例的使用策略放在策略类中配置后才提供调用方使用。3、 简单工厂模式调用方可以直接调用工厂实例的方法属性等;4、策略模式不能直接调用实例的方法属性,需要在策略类中封装策略后调用。总结来说就是简单工厂模式–》创建对象 策略模式–》封装策略(算法)..原创 2021-03-01 23:06:03 · 1781 阅读 · 0 评论 -
三、道阻且长之单例模式
今天好好总结一下单例模式首先什么是单例模式: 《设计模式》一书中给出的定义是:让类自身负责保存它的唯一实例,这个类可以保证没有其他实例被创建(通过截取创建新对象的请求),并且它可以提供一个访问该实例的方法,这就是Singleton模式。有人叫单例模式,也有叫单件模式。那么如何实现以上要求呢?首先,需要保证一个类只有一个实例;在类中,要构造一个实例,就必须调用类的构造函数,如此,为了防止在外...原创 2018-04-05 11:46:32 · 1269 阅读 · 0 评论