设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
简单工厂模式
工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品;在工厂中加工产品,使用产品的人,不用在乎产品是如何生产出来的。从软件开发的角度来说,这样就有效的降低了模块之间的耦合。
简单工厂针对同样的数据,不同的操作用同一个接口

针对同样的数据,不同的操作用不同的接口
抽象工厂针对不同的数据,不同的操作用不同的接口
策略模式依赖c++的多态,抽象类的指针可以访问所有子类对象,(纯虚函数),可以用一个指针访问所有策略的实现类
单例模式单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式(不能让一个程序打开两次 如:不能同时打开2个迅雷 迅雷用的单例模式)
访问者模式更多C/C++学习资料,请私信我“代码”,即可获取
适用于数据结构相对未定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。访问者模式使得增加新的操作变的很容易,就是增加一个新的访问者类。访问者模式将有关的行为集中到一个访问者对象中(做任何更改不需要修改基类,不依赖虚函数)
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己。(QT的信号机制,Windows的消息机制都应用了观察者模式,还有订阅邮件,邮件到了就会给你发邮件)
建造者模式使得产品内部表象可以独立地变化,客户不必知道产品内部组成的细节。可以强制实行一种分步骤进行的建造过程。用一个接口完成不同的操作,需要对客户的需求进行把握。(如:登陆QQ,自动选择所在地的服务器)
解释器模式给定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。(如:360读取lua脚本,这个细节的实现就是解释器模式)
命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否执行,何时被执行以及是怎么被执行的。(命令模式在客户端与服务器之间用的最多 (C/S架构))
模板模式不同的子类可以以不同的方式实现这些抽象方法,
从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,
而将逻辑的细节留给具体的子类去实现。(适用于本地化,做一个软件,在日本是日文,美国是英语...)
桥接模式将抽象化与实现化脱离,使得二者可以独立的变化,
也就是指在一个软件系统的抽象化和实现化之间使用组合聚合关系而不是继承关系,从而使两者可以独立的变化。(相当于配电脑去装机,把各个模块组合到一起)
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。
外观模式外部与一个子系统的通信必须通过一个统一的外观对象进行。每一个子系统只有一个外观类,而且此外观类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个外观类。(多个子系统方法都需要一个外观类统一管理,用统一的接口方便消费者使用)
享元模式享元模式大幅度的降低内存中对象的数量,使用享元模式主要是为了优化内存,相同功能可以并行使用。
原型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。
责任链模式在责任链模式中,很多对象由每一个对象对其下家的引用而接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。(例如:晚上去上英语课,为了好开溜坐到了最后一排,哇,前面坐了好几个漂亮的MM哎,找张纸条,写上“Hi, 可以做我的女朋友吗?如果不愿意请向前传”,纸条就一个接一个的传上去了,糟糕,传到第一排的MM把纸条传给老师了)
中介者模式中介者模式包装了一系列对象相互作用的方式,
使得这些对象不必相互明显作用。从而使他们可以松散偶合。
当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。(如:TCP/IP打洞技术)
装饰模式装饰模式以对客户端透明的方式扩展对象的功能是继承关系的一个替代方案,提供比继承更多的灵活性。动态给一个对象增加功能,这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。
状态模式意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。(如:到了晚上12点要睡觉,到了早上8点要起床...这就是状态)
合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。(用于树状结构)
如果足下基础比较差,可以观看下专栏教程
《C语言51课视频教程合集》
《C++45课视频教程》
通俗易懂,深入浅出,一个视频只讲一个知识点。视频不深奥,不需要钻研,在公交、在地