c++23种设计模式,经典之作
![star](https://csdnimg.cn/release/downloadcmsfe/public/img/star.98a08eaa.png)
0 引言..............................................................................................................................................2 0.1设计模式解析(总序).....................................................................................................2 0.2设计模式解析后记.............................................................................................................2 0.3 与作者联系........................................................................................................................5 1 创建型模式...................................................................................................................................5 1.1Factory模式........................................................................................................................5 1.2 AbstactFactory模式..........................................................................................................11 1.3 Singleton模式...................................................................................................................16 1.4Builder模式.......................................................................................................................18 1.5 Prototype模式...................................................................................................................23 2 结构型模式.................................................................................................................................26 2.1Bridge模式........................................................................................................................26 2.2 Adapter模式......................................................................................................................31 2.3 Decorator模式...................................................................................................................35 2.4Composite模式.................................................................................................................40 2.5 Flyweight模式..................................................................................................................44 2.6Facade模式.......................................................................................................................49 2.7Proxy模式.........................................................................................................................52 3 行为模式.....................................................................................................................................55 3.1 Template模式....................................................................................................................55 3.2Strategy模式.....................................................................................................................59 3.3State模式...........................................................................................................................63 3.4Observer模式....................................................................................................................68 3.5Memento模式...................................................................................................................73 3.6Mediator模式....................................................................................................................76 3.7Command模式..................................................................................................................81 3.8 Visitor模式........................................................................................................................87 3.9 Chain of Responsibility模式.............................................................................................92 3.10 Iterator模式.....................................................................................................................96 3.11Interpreter模式..............................................................................................................100 ### C++23种设计模式精解 #### 0. 引言 设计模式作为软件工程领域的一个重要组成部分,对于提高软件的可维护性、可扩展性和可复用性具有重要意义。本文旨在深入探讨GoF(Gang of Four)提出的23种经典设计模式,并通过C++语言进行具体实现。 #### 1. 创建型模式 创建型模式关注的是对象的创建机制,即如何创建对象,使得系统更加灵活。 ##### 1.1 Factory模式 **定义**:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory方法使一个类的实例化延迟到其子类。 - **应用场景**:当一个类不知道它所必须创建的对象的类的时候。 - **优点**:提高了系统的灵活性,增加了类的复用性。 - **缺点**:每次增加新的产品都需要修改工厂逻辑代码,违背了开闭原则。 ##### 1.2 Abstract Factory模式 **定义**:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 - **应用场景**:系统中有一系列相关的产品族,且这些产品族中的产品依赖于相同的方式,或者拥有共同的接口。 - **优点**:可以独立变化,易于扩展。 - **缺点**:产品族扩展困难,需要修改抽象工厂的接口。 ##### 1.3 Singleton模式 **定义**:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 - **应用场景**:系统只需要一个实例对象,如线程池、缓存等。 - **优点**:资源得到合理利用,避免了对资源的多重占用。 - **缺点**:单例模式破坏了封装性,单例类的扩展困难。 ##### 1.4 Builder模式 **定义**:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 - **应用场景**:当创建复杂对象的算法应该独立于组成该对象的部分的具体类时。 - **优点**:各个具体的建造者相互独立,有利于系统的扩展。 - **缺点**:产品必须有共同点,范围有限制。 ##### 1.5 Prototype模式 **定义**:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 - **应用场景**:创建复杂对象的成本比较大时。 - **优点**:能够指明创建对象的种类,并且可以通过复制这些原型创建新的对象。 - **缺点**:需要为每一个类配备一个克隆方法。 #### 2. 结构型模式 结构型模式关注组合类和对象,形成更大的结构。 ##### 2.1 Bridge模式 **定义**:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 - **应用场景**:如果一个系统有多个维度,且这些维度都需要独立变化时。 - **优点**:提高了系统的可扩展性,实现细节对客户透明。 - **缺点**:会增加系统的复杂度,以及增加更多的编程工作量。 ##### 2.2 Adapter模式 **定义**:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 - **应用场景**:希望复用一些现存的类,但接口又与复用环境要求不一致时。 - **优点**:可以让任何两个没有关联的类一起运行。 - **缺点**:过多地使用Adapter会使系统变得非常零乱。 ##### 2.3 Decorator模式 **定义**:动态地给一个对象添加一些额外的职责。 - **应用场景**:在不影响其他对象的情况下,以动态、透明的方式给单一对象添加职责。 - **优点**:增强了系统的灵活性。 - **缺点**:产生了许多小对象,在对象较多时,会消耗大量的内存。 ##### 2.4 Composite模式 **定义**:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。 - **应用场景**:想要表示对象的部分-整体层次结构时。 - **优点**:简化了客户端,客户端可以一致地处理组件对象和叶子对象。 - **缺点**:理解和实现较为复杂。 ##### 2.5 Flyweight模式 **定义**:运用共享技术有效地支持大量细粒度的对象。 - **应用场景**:系统中有大量相似对象时。 - **优点**:最大限度地减少内存中对象的数量,从而有效地节约内存空间。 - **缺点**:提高了系统的复杂度。 ##### 2.6 Facade模式 **定义**:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 - **应用场景**:当子系统比较复杂,调用难度较大时。 - **优点**:减少了客户处理的对象数目,使得子系统更易于使用。 - **缺点**:不符合开闭原则,一旦子系统的内部发生变化,Facade接口也需要变化。 ##### 2.7 Proxy模式 **定义**:为其他对象提供一种代理以控制对这个对象的访问。 - **应用场景**:远程代理、虚拟代理、保护代理等。 - **优点**:客户端可以保持统一的接口来操作,提高了请求处理的安全性。 - **缺点**:增加了解决方案的复杂度。 #### 3. 行为模式 行为模式关注对象之间的职责分配。 ##### 3.1 Template Method模式 **定义**:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 - **应用场景**:一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。 - **优点**:提高代码的复用性,便于扩展功能。 - **缺点**:每增加一个版本都要增加相应的子类。 ##### 3.2 Strategy模式 **定义**:定义了一系列的算法,把它们一个个封装起来,并且使它们可相互替换。 - **应用场景**:当一个系统应该动态地在几种算法中选择一种时。 - **优点**:算法可以自由切换,避免使用多重条件判断语句。 - **缺点**:客户端必须了解所有的策略类,并自行决定使用哪一种策略类。 ##### 3.3 State模式 **定义**:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 - **应用场景**:一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。 - **优点**:封装了转换规则,将复杂的判断逻辑提取到不同的状态类中。 - **缺点**:状态模式的使用必然会增加系统类和对象的个数。 ##### 3.4 Observer模式 **定义**:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 - **应用场景**:一个对象状态改变给其他对象通知的问题,而且不知道具体有多少对象依赖于这个对象时。 - **优点**:目标和观察者之间是抽象耦合关系,增加新的观察者非常容易。 - **缺点**:如果一个观察者对象中直接引用目标对象,则目标和观察者将会紧密耦合。 ##### 3.5 Memento模式 **定义**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 - **应用场景**:需要保存/恢复数据的相关状态场景。 - **优点**:能够比较完整地保存一个或多个复杂对象的状态,且不会破坏封装性。 - **缺点**:消耗内存资源,如果类的成员变量太多,会占用比较大的内存。 ##### 3.6 Mediator模式 **定义**:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 - **应用场景**:多个对象之间存在网状结构的依赖关系时。 - **优点**:简化了对象之间的交互,使得对象之间的交互更加集中化。 - **缺点**:中介者对象承担了过多的责任,成为系统中的“巨石”类。 ##### 3.7 Command模式 **定义**:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 - **应用场景**:需要在不同的时刻指定请求,队列请求或执行请求。 - **优点**:降低了对象之间的耦合度,新的命令可以很容易添加到系统中去。 - **缺点**:使用Command模式可能会导致某些系统有过多的具体命令类。 ##### 3.8 Visitor模式 **定义**:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 - **应用场景**:需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作“污染”这些对象的类。 - **优点**:增加新的操作很方便,只需添加新的访问者类。 - **缺点**:每个类都需要定义一个accept操作,这会导致很多的接受器操作声明。 ##### 3.9 Chain of Responsibility模式 **定义**:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 - **应用场景**:有多个对象可以处理一个请求,具体哪个对象处理该请求由运行时刻自动确定。 - **优点**:降低耦合度,责任链上的对象都不清楚谁是下一个处理者,也不清楚有没有下一处理者。 - **缺点**:不能保证请求一定被接收,如果链没有正确配置,则请求可能无人处理。 ##### 3.10 Iterator模式 **定义**:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 - **应用场景**:遍历一个聚合对象。 - **优点**:提供了统一的方法来访问集合,迭代器模式支持以不同的方式遍历一个聚合对象。 - **缺点**:由于迭代器模式将存储结构与遍历结构分离,增加新的聚合类需要对应增加新的迭代器类。 ##### 3.11 Interpreter模式 **定义**:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 - **应用场景**:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。 - **优点**:易于改变和扩展文法。 - **缺点**:对于复杂的文法难以维护。 以上介绍了23种设计模式的基本概念、应用场景、优缺点等内容。通过对这些模式的学习和掌握,可以帮助开发者更好地解决实际问题,提升软件的质量和可维护性。在实际项目中,根据具体情况选择合适的设计模式尤为重要。
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/release/download_crawler_static/4831079/bg1.jpg)
![](https://csdnimg.cn/release/download_crawler_static/4831079/bg2.jpg)
![](https://csdnimg.cn/release/download_crawler_static/4831079/bg3.jpg)
![](https://csdnimg.cn/release/download_crawler_static/4831079/bg4.jpg)
![](https://csdnimg.cn/release/download_crawler_static/4831079/bg5.jpg)
剩余104页未读,继续阅读
![avatar](https://profile-avatar.csdnimg.cn/139121d5c5d847d1927893fdc765ecfb_yangximing.jpg!1)
![avatar-vip](https://csdnimg.cn/release/downloadcmsfe/public/img/user-vip.1c89f3c5.png)
- 粉丝: 1
- 资源: 17
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- 被忽视的成本:中国城市扩张导致的生态系统服务损失从三耦合的角度来看
- 永磁同步电机PMSM参数辨识的粒子群优化算法实现流程解析与案例探索,基于粒子群优化算法的PMSM参数精准辨识与迭代更新策略,基于粒子群优化算法的永磁同步电机PMSM参数辨识 关键词:永磁同步电机 粒子
- 揭示城市扩张对植被碳的影响封存能力-以长江经济带为例(软件翻译)
- 双馈风电机组与同步发电机组四机两区域Simulink仿真建模及风光储联合调频与多种控制策略结合混合储能技术研究,双馈风电机组与同步发电机组四机两区域Simulink仿真建模及风光储联合调频控制策略,混
- 电气安装工 初级工.pdf
- 清华大学:普通人如何抓住DeepSeek红利
- Swift 编程语言的入门教程,适合零基础或有一定编程经验的读者快速上手
- 清华出品(104页)DeepSeek从入门到精通
- DeepSeek指导手册(24页)
- 研究机翼在不同速度下产生的噪音和性能表现
- JimuFlow RPA工具MacOS版v1.0.0
- MATLAB滚动轴承故障机理建模与仿真分析:基于ODE45的数值计算与多类型故障诊断预测研究,MATLAB轴承动力学模拟:滚动轴承故障机理建模与数值计算,多故障类型模拟及数据分析报告(含故障类型识别与
- 基于改进Relief算法的特征选取与关联向量机在短期负荷预测中的Matlab应用复现,基于改进Relief算法的特征选取与关联向量机在短期负荷预测中的实践(Matlab复现),相关向量机和特征选取技术
- COMSOL模拟技术揭秘:金属合金凝固过程及连铸工艺精确分析-相场流场与温度场的综合运用探究坯壳厚度计算,金属合金凝固与连铸过程数值模拟:相场流场温度场分析下的坯壳厚度计算,comsol数值模拟
- JimuFlow RPA工具Ubuntu版v1.0.0
- 煤层瓦斯渗透扩散与煤体孔隙裂隙二重介质特性研究-基于修正的P-M渗透率模型与气固耦合效应的模拟分析,煤层瓦斯渗透扩散的深部采煤模型研究:建立孔隙裂隙二重介质特性P-M渗透率模型与气固耦合模型的解析
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)
- 1
- 2
- 3
前往页