HelloAllenZhu / design-patterns-cpp

C++ design patterns

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

C++ design patterns

C++ design patterns/C++设计模式

####################创建型模式####################

简单工厂模式: 非标准的设计模式: 略

单例模式: 整个系统唯一的全局对象,不需要创建多个,且系统运行期间一直存在。

抽象工厂模式: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

工厂方法模式: 定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method 使一个类的实例化延迟到其子类。

建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式主要是封装一套完整的创建对象的流程/过程/模板(专注于对象的创建过程),这个流程/过程/模板可以创建一系列类似的产品。例如:有同一套创建流程,它既可以创建一个斗地主游戏房间,也可以创建一个卡五星游戏房间。

原型模式: 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。

####################结构型模式####################

适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。

装饰器模式: 在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。例如:1、创建一个手机对象,然后给它装饰上漂亮的外壳、手机绳、贴膜;2、创建一个游戏,将其包装成房卡场、金币场或比赛场

组合模式:

外观模式(Facade Pattern)又称为门面模式,属于结构型模式。Facade 为子系统中的一组接口提供了一个统一的高层接口,该接口使得子系统更加容易使用。 示例:病人去医院需要挂号、排队、问诊、付钱、拿药。如果全部跑下来,估计累趴了,所以这个时候会出现一个导医(类似于接待员),全程交给ta去办理,这样客户就不会累了,至于ta怎样办理的细节,客户不需知道。

享元模式:

代理模式:

####################行为型模式####################

模板方法模式: 定义一个操作中的算法结构,将一些具体的实现步骤放到到子类中。子类可以在不改变算法结构的前提下,重新定义该算法的某些特定实现。例如:Login、Gateway、Center服在启动时,都需要读配置、连MQ、连Redis、连Mysql,但是每一个服务器具体的实现细节又各有不同。

命令模式:

迭代器模式:

观察者模式: 当某对象的状态/数据发生变化时,及时通知与之相关的对象进行更新。例如:用户修改昵称之后,UI上所有与昵称有关的窗口都要动态更新。

中介者模式: 用一个中介对象来封装n个对象之间的交互,使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。例如:用户A发了一个朋友圈,然后微信服务器(中介者)会同步更新到其所有好友的朋友圈;同理,其他用户发朋友圈也是如此。

备忘录模式: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以后就可将该对象恢复到保存的状态。例如:1、将游戏当前进度保存到硬盘,下次玩的时候,直接从硬盘读取上一次的游戏数据。2、文本编辑器,每一步操作都写入历史记录,然后可以一路撤销,回到上一次操作的状态。

解释器模式:

状态模式: 在一个对象的内部状态变化时改变其行为,一个对象的行为取决于该对象的内部状态。例如:画笔当前处于圆形状态,它的绘图操作就会画圆形;处于矩形状态,绘图操作就会画矩形。

策略模式: 同一个接口,执行不同的算法。例如:当日在线时长超过1小时的用户积分奖励执行A算法,否则执行B算法。

职责链模式: 解除请求的发送者和接收者之间的耦合,使链上的多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它。例如:客户购买商品,每种商品都有各自的优惠折扣,将这些折扣顺序包装成一条链, 当用户购买了A商品时,执行A商品的优惠;购买了B商品时,执行B商品的优惠。

访问者模式:

参考:https://blog.csdn.net/liang19890820/article/details/66974516

C++ 英语教程

https://www.tutorialspoint.com/index.htm

https://zh.cppreference.com/w/

https://www.geeksforgeeks.org/pure-virtual-destructor-c/

https://thispointer.com/category/c/c-11/c11-threads/

About

C++ design patterns

License:GNU General Public License v3.0


Languages

Language:C++ 95.3%Language:QMake 4.5%Language:C 0.2%