# designpattern_cpp **Repository Path**: fortunely/designpattern_cpp ## Basic Information - **Project Name**: designpattern_cpp - **Description**: C++实现设计模式例程,用于学习GoF设计模式 - **Primary Language**: C++ - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-09-29 - **Last Updated**: 2021-10-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # designpattern_cpp # 介绍 C++ 实现GoF设计模式,用于学习设计模式。 项目源码地址:[Gitee designpattern_cpp](https://gitee.com/fortunely/designpattern_cpp) # 软件架构 23个设计模式按3大类进行分类:创建型模式、结构型模式、行为模式。 例程对应目录: 创建型模式 - `./creation` 结构型模式 - `./structure` 行为模式 - `./behavior` 每种具体的设计模式下,分为2类例程: 1. std(标准例程) 按设计模式标准UML定义实现,不关心具体应用,只关心类之间的关系 2. example(应用例程) 具有现实应用场景的例程,关注如何解决现实的部分问题 # 安装教程 项目使用CMake编译,支持同时为每个例程都生成一个目标程序。IDE建议使用Clion 2021.03以上版本。 1. Clion导入方式 打开项目后,点击File > Reload Cmake Project, 就会自动生成cmake-build-debug文件夹。 然后,就可以正常build。 2. 运行方式 点击Run... > Edit Configurations..,然后选择具体要运行的目标程序即可。 # 设计模式简述 ## 创建型模式 ## 结构型模式 ### 代理模式 Proxy > 为其他对象提供一种代理以控制这个对象的访问。 核心点:代理类不会改变被代理类的接口。 **代理模式 vs 装饰器模式** 装饰器模式是为了增强原有类的功能;而代理模式是对原有类的功能加以控制,不会增加新功能。 **代理模式 vs 适配器模式** 适配器模式解决原有2个类由于接口不兼容而不能使用的问题,创建新接口会改变原有接口; 代理模式不会改变被代理类的接口。 ### 享元模式 Flyweight > 运用共享技术有效地支持大量细粒度的对象。 关于flyweight执行时所需的状态,必定是内部的或外部的。 **1. 内部状态** 指对象共享出来的信息,存储在ConcreteFlyweight享元对象内部,不会随环境改变。 **2. 外部状态** 指对象得以依赖的一个标记,是处于随环境改变而改变、不可共享的状态。外部对象由Client对象存储或计算,当用户调用flyweight对象的操作的时候,将该状态传递给它。 另外,用户不应直接实例化ConcreteFlyweight,而只能从FlyweightFactory对象得到,这样可以保证对它们适当地进行共享。 因为FlyweightFactory会维护一个内存池(如hashmap),将共享对象存储其中,并通过外部状态来标记(寻找)。 ## 行为模式 ### 策略模式 Strategy > 定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。 核心点:原有程序结构有多个if-else结构,用来选择不同算法。策略模式适用于算法并非是固定的,很可能会扩展新算法的场景。 ### 命令模式 Command > 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。 核心点:请求者无需知道动作真正的执行者-响应者细节,也就不用直接与响应者交互,而是只需要通过传入不同的命令对象,让对象通过与响应者交互,以执行命令。 # 参与贡献 fortunely