C++设计模式
文章平均质量分 93
23种C++设计模式讲解
逍遥俊子
低调的码农
展开
-
26-C++设计模式总结
C++设计模式总结一个目标:管理变化,提高复用!两种手段:分解VS.抽象八大原则:(1)依赖倒置原则( DIP)(2)开放封闭原则( OCP)(3)单一职责原则( SRP)(4)Liskov 替换原则( LSP)(5)接口隔离原则( ISP)(6)对象组合优于类继承(7)封装变化点(8)面向接口编程重构技法(1)静态 → 动态(2)早绑定→ 晚绑定(3)继承→ 组合(4)编译时依赖→ 运行时依赖(5)紧耦合→ 松耦合...原创 2020-08-26 20:24:07 · 187 阅读 · 0 评论 -
25-解析器(Interpreter)
这里写目录标题1. 定义2. 适用场景3. 要点总结4. Demo1. 定义2. 适用场景3. 要点总结4. Demo原创 2020-08-25 23:17:46 · 301 阅读 · 0 评论 -
24-访问器(Visitor)
这里写目录标题1. 定义2. 适用场景3. 要点总结4. Demo1. 定义2. 适用场景3. 要点总结4. Demo原创 2020-08-25 20:39:22 · 576 阅读 · 0 评论 -
23-命令模式(Command)
这里写目录标题1. 定义2. 适用场景3. 要点总结4. Demo1. 定义2. 适用场景3. 要点总结4. Demo原创 2020-08-25 20:08:50 · 192 阅读 · 0 评论 -
22-职责链(Chain of Resposibility)
这里写目录标题1. 定义2. 适用场景3. 要点总结4. Demo1. 定义2. 适用场景3. 要点总结4. Demo原创 2020-08-23 11:23:44 · 172 阅读 · 0 评论 -
21-迭代器(Iterator)
这里写目录标题1. 定义2. 适用场景3. 要点总结4. Demo1. 定义2. 适用场景3. 要点总结4. Demo原创 2020-08-23 11:22:13 · 139 阅读 · 0 评论 -
20-组合模式(Composite)
这里写目录标题1. 定义2. 适用场景3. 要点总结4. Demo1. 定义2. 适用场景3. 要点总结4. Demo原创 2020-08-23 11:21:13 · 150 阅读 · 0 评论 -
19-备忘录(Memento)
这里写目录标题1. 定义2. 适用场景3. 要点总结4. Demo1. 定义2. 适用场景3. 要点总结4. Demo原创 2020-08-23 11:20:04 · 171 阅读 · 0 评论 -
18-状态模式(State)
这里写目录标题1. 定义2. 适用场景3. 要点总结4. Demo1. 定义2. 适用场景3. 要点总结4. Demo原创 2020-08-23 11:19:03 · 195 阅读 · 0 评论 -
17-中介者(Mediator)
这里写目录标题1. 定义2. 适用场景3. 要点总结4. Demo1. 定义2. 适用场景3. 要点总结4. Demo原创 2020-08-23 11:18:02 · 201 阅读 · 0 评论 -
16-适配器(Adapter)
这里写目录标题1. 定义2. 适用场景3. 要点总结4. Demo1. 定义2. 适用场景3. 要点总结4. Demo原创 2020-08-23 11:17:04 · 212 阅读 · 0 评论 -
15-代理模式(Proxy)
这里写目录标题1. 定义2. 适用场景3. 要点总结4. Demo1. 定义2. 适用场景3. 要点总结4. Demo原创 2020-08-23 11:15:51 · 173 阅读 · 0 评论 -
14-门面模式(Façade)
这里写目录标题1. 定义2. 适用场景3. 要点总结4. Demo1. 定义2. 适用场景3. 要点总结4. Demo原创 2020-08-23 11:14:26 · 236 阅读 · 0 评论 -
13-享元模式(Flyweight)
这里写目录标题1. 定义2. 适用场景3. 要点总结4. Demo1. 定义2. 适用场景3. 要点总结4. Demo原创 2020-08-23 11:12:49 · 150 阅读 · 0 评论 -
12-单件模式(Singleton)
单件模式(Singleton)1. 定义2. 适用场景3. 要点总结4. Demo1. 定义保证一个类仅有一个实例,并提供一个该实例的全局访问点。2. 适用场景在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?这应该是类设计者的责任,而不是使用者的责任。3. 要点总结Singleton模式中的实例构造器可以设置为protected 以允许子类派生。Single原创 2020-08-22 23:18:03 · 254 阅读 · 0 评论 -
11-构建器(Builder)
构建器(Builder1. 定义2. 适用场景3. 要点总结4. Demo1. 定义将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化)。2. 适用场景在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着原创 2020-08-22 22:38:28 · 422 阅读 · 0 评论 -
10-原型模式(Prototype)
原型模式(Prototype)1. 定义2. 适用场景3. 要点总结4. Demo1. 定义使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。2. 适用场景在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变?3. 要点总结Prototype模式同原创 2020-08-22 20:26:15 · 140 阅读 · 0 评论 -
09-抽象工厂(Abstract Factory)
抽象工厂(Abstract Factory)1. 定义2. 适用场景3. 要点总结4. Demo4.1 常规场景4.2 使用Factory Method4.3 使用Abstract Factory1. 定义提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。2. 适用场景在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避原创 2020-08-22 19:55:39 · 138 阅读 · 0 评论 -
08-工厂方法(Factory Method)
工厂方法(Factory Method)1. 定义2. 适用场景3. 要点总结4. Demo4.1 常规场景4.2 使用Factory Method1. 定义定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。2. 适用场景在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“原创 2020-08-20 22:53:23 · 153 阅读 · 0 评论 -
07-桥模式(Bridge)
桥模式(Bridge)1. 定义2. 适用场景3. 要点总结4. Demo4.1 两个非常强的业务维度例子4.2 采用Bridge模式1. 定义将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。2. 适用场景由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个纬度的变化。如何应对这种“多维度的变化”?如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂度?3. 要点总结Bridge模式使用“对象间的组合关系”解耦了抽象原创 2020-08-20 20:23:06 · 276 阅读 · 0 评论 -
06-装饰模式(Decorator)
装饰模式(Decorator)1. 定义2. 适用场景3. 要点总结4. Demo4.1 过度继承问题4.2 Decorator 模式4.3 引入DecoratorStream完美升级1. 定义动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码 & 减少子类个数)。2. 适用场景在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功原创 2020-08-20 15:49:22 · 150 阅读 · 0 评论 -
05-观察者模式(Observer)
观察者模式(Observer)1. 定义2. 适用场景3. 要点总结4. Demo4.1 普通实现4.2 Observer实现1. 定义定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。2. 适用场景在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,原创 2020-08-20 15:46:12 · 181 阅读 · 1 评论 -
04-策略模式(Strategy)
策略模式(Strategy)1. 定义2. 适用场景3. 要点总结4. Demo1. 定义定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)。2. 适用场景在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?3. 要点总结原创 2020-08-20 15:43:37 · 149 阅读 · 0 评论 -
03-模板方法(Template Method)
模板方法(Template Method)1. 定义2. 适用场景3. 要点总结4. Demo4.1 场景简介4.2 伪代码1. 定义定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override 重写)该算法的某些特定步骤。2. 适用场景在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的原创 2020-08-20 15:39:32 · 176 阅读 · 0 评论 -
02-C++模式概述
模式概述1. GOF-23模式分类1.1 按目的1.2 按范围2. 从封装变化角度对模式分类2.1 组件协作2.2 单一职责2.3 对象创建2.4 对象性能2.5 接口隔离2.6 状态变化2.7 数据结构2.8 行为变化2.9 领域问题1. GOF-23模式分类1.1 按目的创建型(Creational)模式:将对象的部分创建工作延迟到子类或者其他对象,从而应对需求变化为对象创建时具体类型实现引来的冲击。结构型(Structural)模式:通过类继承或者对象组合获得更灵活的结构,从而应对需求变化为原创 2020-08-20 15:36:18 · 174 阅读 · 0 评论 -
01-C++面向对象设计原则
面向对象设计原则1. 依赖倒置原则(DIP)2. 开放封闭原则(OCP)3. 单一职责原则(SRP)4. Liskov 替换原则(LSP)5. 接口隔离原则(ISP)6. 优先使用对象组合,而不是类继承7. 封装变化点8. 针对接口编程,而不是针对实现编程变化是复用的天敌!面向对象设计最大的优势在于:抵御变化!1. 依赖倒置原则(DIP)高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定) 。抽象(稳定)不应该依赖于实现细节(变化) ,实现细节应该依赖于抽象(稳定)。2.原创 2020-08-20 15:04:08 · 154 阅读 · 0 评论