梁越

c++设计模式

0 人看过

简介

设计模式

要深入了解设计模式,首先要知道设计模式都有哪些种类,才能根据你的需求合理设计,是要创建很多类呢,还是一个类有很多不同的类似行为,还是说要根据结构来设计,根据以上说的这三点,可以分为以下三类

创建型

  1. 简单工厂
  2. 工厂
  3. 抽象工厂
  4. 生成器
  5. 原型
  6. 单例

结构型

  1. 适配性
  2. 桥接
  3. 组合
  4. 装饰
  5. 外观
  6. 享元
  7. 代理模式

行为型

  1. 责任链
  2. 命令
  3. 迭代器
  4. 中介者
  5. 备忘录
  6. 观察者
  7. 状态
  8. 策略
  9. 模板
  10. 访问者

设计模式规则

不管你用的什么设计模式,都离不开以下8个设计原则

  • 依赖倒置原则(DIP)–实现隔离变化

    • 高层模块(稳定)不应该依赖于底层模块(变化),二者都应该依赖于抽象(稳定)。
    • 抽象(稳定)不应该依赖于实现细节(变化),细节应该依赖于抽象(稳定)。
    • 解释,将需要变动的部分,作为稳定公共抽象基类的子类,将公共方法写在基类中,关键方法作为虚函数交给子类实现。调用公共函数时,只用管理基类指针,使用基类指针调用公共虚函数,就可以调用对应的子函数。实现稳定与不稳定的隔离。
  • 开放封闭原则(OCP):

    • 对扩展开放,对更改封闭
    • 类模块应该是可扩展的,但是不可修改。
    • 解释:增加中间抽象,避免过多的更改,保证可扩展性。
  • 单一职责原则(SRP)

    • 一个类应该仅有一个引起它变化的原因。
    • 变化的方向隐含着类的责任
  • Liskov替换原则(LSP)

    • 子类必须能够替换他们的基类(IS-A)
    • 继承表达抽象。
  • 接口隔离(ISP)

    • 不应该强迫客户程序依赖它们不用的方法。
    • 接口应该小而完备。
  • 优先使用对象组合,而不是类继承

    • 继承类通常为”白箱复用”,对象组合通常为”黑箱复用”。
    • 继承在某种程度上破坏了封装性,子类父类耦合度高。
    • 对象组合则只被要求被组合的对象具有良好定义的接口,耦合度低。
  • 封装变化点

    • 使用封装来创建对象之间的分界层,让设计者可以在分界层中任意一侧进行修改,而不会对另外一侧产生不良的影响,从而实现层次间的松耦合。
  • 针对接口编程,而不是针对实现编程

    • 不将变量类型声明为某个具体的类,而是声明为某个接口。
    • 客户端程序无需获知对象的具体类型,只需要知道对象所具有的接口。
    • 减少系统中各个部分的依赖关系,从而实现“高内聚”、“松耦合”的类型设计方案。

    其实以上的8个设计原则可以总结以下几点为:

    • 静态->动态
    • 早绑定->晚绑定
    • 继承->对象组合
    • 编译时依赖->运行时依赖
    • 紧耦合->松耦合

参考视频:https://www.bilibili.com/video/BV1cW41157n1?p=3

参考链接1:https://blog.csdn.net/u010993820/article/details/80968933

参考链接2:https://blog.csdn.net/qq_33854260/article/details/77398781?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.nonecase

参考链接3:https://refactoringguru.cn/design-patterns/behavioral-patterns