C++设计模式

本文根据李建忠老师C++设计模式编写.是对李建忠老师视频课程的一个总结.

面向对象设计原则

依赖倒置原则

  • 稳定的高层模块不应该依赖变化的底层模块,二者都应该依赖于稳定的抽象.
  • 稳定的抽象不应该依赖于变化的实现细节,实现细节应该依赖于稳定的抽象.

开放封闭原则

  • 对扩展开放,对更改封闭.
  • 类模块应该是可扩展的,但不可修改.

单一职责原则

  • 一个类应该仅有一个引起它变化的原因.
  • 变化的方向隐含着类的责任.

Liskov替换原则

  • 子类必须能够替换它们的父类.

接口隔离原则

  • 不应该强迫User使用他们不用的方法.
  • 接口应该小而完备

优先使用对象组合而非类继承

  • 继承在某种程度上破坏了封装性,子类父类耦合度过高.
  • 对象组合只要求被组合的对象具有良好定义的接口,耦合度低.

封装点变化

  • 使用封装来创建对象之间的分界层,让设计者在分界一侧修改而不改变对另一侧的影响.

针对接口编程而非针对实现编程

  • 不将变量类型声明为某个具体类而是声明为某个抽象接口.
  • User无需知道对象具体类型,只需知道对象具有的接口.
  • 减少系统中各部分的依赖关系,高内聚,低耦合.

写代码时,不要直接使用设计模式,而是要重构到某种模式.

Template Method

使用场景

  • 某项任务具有稳定的整体结构,但每个子步骤有很多改变的需求.
class Library {
  public:
    void step1() {
    }
    void step3() {
    }
    void step5() {
    }
};
class Application {
  public:
    bool step2() {
    }
    void step4() {
    }
};
int main() {
    Library lib;
    Application app;
    lib.step1();
    if (app.step2()) {
        lib.step3();
    }
    for (int i = 0; i < 4; ++i) {
        app.step4();
    }
    lib.step5();
}

main函数中的流程稳定,Application开发人员除了编写class Application,还要编写main流程.稳定的main流程应该应用Template Method.

class Library {
  public:
    void step1() {
    }
    void step3() {
    }
    void step5() {
    }
    virtual bool step2() = 0;
    virtual void step4() = 0;
    void run() {
        step1();
        if (step2()) {
            step3();
        }
        for (int i = 0; i < 4; ++i) {
            step4();
        }
        step5();
    }
    virtual ~Library();
};
class Application : public Library {
  protected://作为public让外界调用没有意义,仅用来重写Library的方法。
    virtual bool step2() {
    }
    virtual void step4() {
    }
};
int main() {
    Library* pLib = new Application;
    pLib->run();
    delete pLib;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值