![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++设计模式
Chiang木
这个作者很懒,什么都没留下…
展开
-
00 C++ UML类图详解
基本概念:类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。类图的3个基本组件:类名、属性、方法。在UML类图中,常见的有以下几种关系:泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation,组合(Composition),依赖(Dependency),各种关系的强弱顺序:泛化 = 实..原创 2021-09-29 20:29:48 · 4543 阅读 · 2 评论 -
01 设计模式概论
**什么是设计模式?**设计模式是一套被反复使用、多数人知晓的代码设计经验的总结。使用设计模式,有利于提升代码的复用性、阅读性以及可靠性。标准定义为:设计模式就是一种在特定环境中解决特定问题的一种方案。1、设计模式根据目的可分为三种:创建型:主要用于创建对象结构型:主要用于处理类和对象的组合行为型:主要用于描述对类或对对象怎样的交互及怎样分配指责。2、设计模式根据使用范围可分为...原创 2019-03-13 22:40:59 · 230 阅读 · 0 评论 -
02 设计模式的六大原则
1、开-闭原则设计模式的核心原则就是开闭原则,即对扩展开放,对修改关闭。意思就是说,一个好的代码,可以在不修改源代码的情况下,扩展你的功能,这种代码具有一定的稳定型和延续性。实现开闭原则的关键就是抽象化。在开闭原则中不允许修改的是抽象的类或接口,允许扩展的是具体的实现类。2、里氏代换原则里氏代换原则规定,任何基类可以出现的地方,子类都可以出现。即可以使用子类代替父类进行函数传参。最形象的例...原创 2019-03-13 23:26:05 · 212 阅读 · 0 评论 -
03 简单工厂模式
简单工厂模式又叫做静态工厂方法模式。它的核心思想就是用一个工厂,根据输入的条件不同,从而产生不同的类,然后根据不同类的virtual函数得到不同的结果,这就理所当然的要求被创建的实例要具有共同的父类。优点:工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如...原创 2019-03-14 20:32:49 · 307 阅读 · 0 评论 -
04 工厂模式
工厂模式又叫做多态工厂模式。工厂模式的核心是在简单工厂模式之上在封装一个抽象工厂类,从而将创建工作推迟到抽象工厂类的子类中,这样做的最大好处是使工厂模式符合开闭原则。即在新增一个产品时,不再是修改具体工厂类的成员函数了,而是通过抽象工厂类派生出一个具体工厂类,在具体工厂类中实现新产品的生产。总之一句话就是:简单工厂模式+开闭原则=工厂模式。优点:克服了简单工厂违背开放-封闭原则的缺点,又保留了...原创 2019-03-14 20:55:20 · 194 阅读 · 0 评论 -
05 抽象工厂模式
现在我们假设一种场景,有个水果商人,他想买一些水果,包括苹果、香蕉、西红柿,这时候使用工厂模式我们只要像苹果工厂、香蕉工厂、西红柿工厂提出订单即可,水果自然就生产出来了,但是如果这时候,商人为了扩大档次,想要进口美国的上面三种水果,这时候如果还是使用工厂模式,就不得不向美国的三家水果工厂提出订单,如果这时候又要日本的水果,又要创建三个日本的水果工厂。这样下去,工厂的种类将是以三倍速度增长,类的种类...原创 2019-03-14 21:54:08 · 281 阅读 · 0 评论 -
06 单例模式
单例模式又叫做单件模式,它的核心定义是:保证一个类在一个程序只有一个实例存在,同时至少提供一个能访问该实例的全局方法。例如我们Windows电脑中的任务管理器,在整个系统运行期间,只存在一个任务管理器的实例。为了保证该类只存在一个实例,在定义该类时,需要将类的构造函数置为private权限。它有两种实现方式,分别是饿汉式和懒汉式,示例代码如下:懒汉式:#include <i...原创 2019-03-14 22:41:51 · 294 阅读 · 0 评论 -
07 原型模式
原型模式是一种对象创建型模式,通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象,且数据也完全保持一致。由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。 目标对象是原型对象的一个克隆。不仅目标结构相同,数据也完全相同。 根据对象克隆深度层次的不同,有浅度克隆与深度克隆之分。 缺点是必须为每个类配备一个克隆方法。类图...原创 2019-03-14 23:07:01 · 252 阅读 · 0 评论 -
08 组合模式
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。使得客户以一致的方式处理单个对象以及对象的组合。组合模式实现的最关键的地方是:简单对象和复合对象必须实现相同的接口。这就是组合模式能够将组合对象和简单对象进行一致处理的原...原创 2019-03-14 23:29:54 · 241 阅读 · 0 评论 -
09 模板模式
模板模式又叫做模板方法模式,是行为模式之一。它把具有特定步骤算法中的某些必要的处理委让给抽象方法,然后通过子类继承实现对抽象方法的不同实现从而改变整个算法的行为。即先制定一个顶级的逻辑框架,而将逻辑的具体实现细节交给具体的子类来实现。例如:制作汽车都需要三个步骤:制作车头->制作车身->制作车尾。但是对于JEEP车,需要的顺序相同,但细节不同,JEEP车顺序为:制作JEEP车头-&...原创 2019-03-15 16:34:41 · 209 阅读 · 0 评论 -
10 责任链模式
责任链模式也叫做职责链模式、职责连锁模式。在该模式下,很多对象由每一个对象对其下家的引用而连接起来形成一条链,请求在这个链上传递,直到某个对象处理了该请求。在链上的处理者有两个选择,一个是处理该请求,一个是将请求推给下一家。一个请求最终可能会出现没有被处理的情况。例如客户把一个请求交给A,A完成了a部分之后,把任务交给B,B完成了b部分交给C,C完成了c部分后,交给D。此时D判断能否完成d部分...原创 2019-03-15 20:19:16 · 210 阅读 · 0 评论 -
11 迭代器模式
迭代器模式又叫迭代模式。迭代器模式提供了一种顺序访问聚合对象中各元素的方法,隐藏了对象的内部结构,为遍历不同聚合结构,提供了如“开始”、“下一个”、“是否遍历结束”、“当前遍历位置”等统一的操作接口。即该模式在遍历容器之前,新定义了一个外部类,容器把对内部对象的遍历访问委派外部类。在使用该模式之前,我们应该明白迭代器模式是用来解决什么问题的,或者说,如果不使用该模式而使用其他方法会存在什么问题...原创 2019-03-15 21:22:21 · 214 阅读 · 0 评论 -
12 外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统,比如类库、子系统等,提供一个一致的接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。优点:1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。缺点:不符合开闭原则...原创 2019-03-15 21:31:51 · 266 阅读 · 0 评论 -
13 代理模式
所谓代理,指的是具有与代理元(被代理的对象)具有相同接口的类,客户端必须只能通过代理与被代理对象进行间接交互。而代理一般会在和客户交互过程中进行某些特殊处理。例如你要买导弹,你没法跟制造商直接接触,只能通过代理军火商进行交互,而军火商则会在你和他交互过程中,做一些例如加价操作。优点: 1、职责清晰。 2、高扩展性。 3、智能化。缺点: 1、由于在客户端和真实主题之间增加了代理对象,因此有些...原创 2019-03-15 21:44:04 · 183 阅读 · 0 评论 -
14 享元模式
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。使用该模式的关键是将享元的内蕴状态(可以共享)即外蕴状态(不可以共享)区分开来。优点:大大减少对象的创建,降低系统的内存,使效率提高,且...原创 2019-03-15 22:01:34 · 194 阅读 · 0 评论 -
15 装饰器模式
装饰器模式又叫做包装模式。装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。是继承关系的一种替代方案。优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。缺点:多层装饰比较复杂。...原创 2019-03-17 21:39:42 · 202 阅读 · 0 评论 -
16 适配器模式
适配器模式是为了将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。例如我们的手机充电口都是12V的,是不能直接接到我们的家庭电路上的,因为我们的家庭电路的电压都是220V的,如果直接连接,可能会把手机给充爆了。这时候就需要一个适配器,也就是我们的充电器,他可以把从家庭电路中出来的220V电压转换成12V之后再输送给手机,这样手机就可以安全的充电了...原创 2019-03-17 22:07:26 · 154 阅读 · 0 评论 -
17 策略模式
策略模式是行为模式之一,它对一系列算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法调用交给客户端决定。例如我们有一个武器模子,然后通过具体实现,可以通过这个模子制作出一把刀、一把枪、甚至是一颗原子弹。然后把制作好的武器都交给客户端,具体使用什么武器,完全交给客户端决定。这就是策略模式。优点: 1、算法可以自由切换。 2、避免使用多重...原创 2019-03-17 22:33:58 · 188 阅读 · 0 评论 -
18 中介者模式
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使类之间的交互统一放在中介者类中进行控制,使代码易于维护。就像现实中的一个媒人作用,当两个年轻人不好意思直接找对象时,可以通过找媒人帮忙进行,就算不合适,也只要告诉媒人进行转达即可,免去了尴尬。优点:1、降低了类的复杂度,将一对多转化成...原创 2019-03-18 14:35:58 · 216 阅读 · 0 评论 -
19 建造者模式
建造者模式又叫生成器模式,它把复合对象复杂的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。即将产品的内部表象和产品的生成过程分割开来,从而使用一个建造过程生成具有不同内部表象的产品对象。建造者模式和工厂模式的区别:工厂模式:有一个抽象工厂 实现一个具体工厂-汽车工厂 汽车工厂A生产汽车A,得到汽车A 汽车工厂B生产汽车B,得到汽车B这样做实现了购买者...原创 2019-03-18 16:13:41 · 202 阅读 · 0 评论 -
20 桥接模式
桥接模式使基于类的最小设计原则,通过封装、聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象和行为的具体实现分割开来,从而保证各部分的独立性以应对他们的功能扩展。即这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。也就是说将他们之间的强关联变成弱关联,即在一个软件系统内的抽象化和实现化之间使用组合聚合关系,而不是继承。从而使得这两种类型的类可被结构化改变而互不影响...原创 2019-03-18 17:51:46 · 315 阅读 · 0 评论 -
21 观察者模式
观察者模式是行为模式之一,他的作用就是当一个对象的状态发生改变时,可以由这个对象自动通知其他关联对象,主动去刷新他们的状态。优点: 1、观察者和被观察者是抽象耦合的。 2、建立一套触发机制。缺点: 1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。 2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃...原创 2019-03-18 19:49:57 · 226 阅读 · 0 评论 -
22 备忘录模式
备忘录模式是行为模式之一,它的作用是保存对象内部状态,并在需要时,恢复对象以前的状态。相当于我们文档编辑中的撤销操作。备忘录模式的用意是定义一个外部类用于存储原对象内部状态的一个快照,即在不破坏封装的条件下,将一个对象的当前状态在外部存储下来,从而可以在适当时候把这个对象还原到原来的状态。优点: 1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。 2、实现了信...原创 2019-03-18 20:32:27 · 164 阅读 · 0 评论 -
23 命令模式
在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类。命令模式就是把一个请求或操作封装到一个对象中,把发出命令的责任和执行命令的责任分隔开,委派给不同的对象。优点: 1、降低了系统耦合度。 2、新的命令可以很容易添加到系统...原创 2019-03-18 22:44:42 · 220 阅读 · 0 评论 -
24 状态模式
状态模式允许通过改变对象内部的状态而改变其行为,此时这个对象表现得就像修改了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里,每个状态对象都属于一个抽象状态类的一个子类,当对象的状态发生变化时,对象便改变其所选的子类,从而达到修改其行为的目的。优点: 1、封装了转换规则。 2、枚举可能的状态,在枚举状态之前需要确定状态种类。 3、将所有与某个状态有关的行为放到一个类中,并且可以方...原创 2019-03-19 10:30:39 · 254 阅读 · 0 评论 -
25 访问者模式
访问者模式的目的是封装一些施加于某种数据结构之上的操作,一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。访问者模式适应于那种数据结构相对稳定的系统,它把数据结构和作用于数据机构之上的操作的耦合完全解开,使得操作集合可以自由的演化。访问者模式增加一个新的操作也很简单,只要增加一个新的访问者类即可。优点: 1、符合单一职责原则。 2、优秀的扩展性。 3、灵活性。缺点: 1、具...原创 2019-03-19 11:46:33 · 190 阅读 · 0 评论