C/C++基础知识点——设计原则及设计模式

如何实现模块间高内聚、低耦合?

  1. 封装与抽象;
  2. 添加中间层;
  3. 模块化;
  4. 设计思想与原则
    1. 单一职责;
    2. 接口隔离原则;
    3. 依赖倒置;
    4. 迪米特原则;
    5. 多用组合少用继承;
  5. 设计模式:观察者模式

设计原则及设计模式

六大设计原则:

单一职责原则;里氏替换原则;开闭原则;依赖倒置原则;接口隔离原则;最少知识原则。

23种设计模式:

建造型

单例模式;工厂模式;建造者模式;原型模式(不常用)

结构型

[常用模式] 代理模式;桥接模式;装饰模式;适配器模式;
[不常用模式] 外观模式;组合模式;享元模式;

行为型

[常用模式] 观察者模式;模板模式;策略模式;职责链模式;迭代器模式;状态模式;
[不常用模式] 访问者模式;备忘录模式;命令模式;解释器模式;中介模式;

单一职责原则:

类或者模块的职责保持单一,即一个类或者一个模块尽可能只做一件事(对于函数同样使用)

尽量避免:

  1. 类中代码行数、函数或属性过多;
  2. 类依赖其他类过多;
  3. 私有方法过多;
  4. 类中大量方法都集中用于操作类的某一属性;

开闭原则:

对扩展开放,对修改关闭
子类的设计要保证在替换父类的时候,不改变原有程序的逻辑以及不破坏原有程序的正确性。

迪米特原则:

实现代码的“高内聚,低耦合”。

  1. 不该有直接依赖关系的类之间,不要有依赖;
  2. 有依赖关系的类之间,尽量只依赖必要的接口;
  3. 减少类之间的耦合,让代码越来越独立

简单工厂模式(静态工厂方法模式)

定义:定义一个类用来创建其它类的实例,被创建的实例通常都具有公共的父类。
优点:无须知道所创建的具体产品的名字,只需要知道具体产品类对应的参数
缺点:

  1. 随着类的产品的增加,类的职责越来越大;
  2. 某些产品的增加,需要不断地修改工厂类,增加响应判断逻辑,不利于后期代码维护和扩展(打破了开闭原则);

简单工厂模式为了解决什么问题?

  1. 为了提高代码高内聚和低耦合;
  2. 父类中不知道实例化那一具体的子类;

解决问题

将类实例化操作与使用对象的操作分离,让使用者不知道具体参数就可以实例化出所需要的产品类,实现了解耦;

简单工厂模式结构:

  1. 具体的产品类(定义具体产品的公共接口);
  2. 抽象的产品类(定义具体产品);
  3. 工厂{通过创建静态方法传入不同参数从而创建不同的具体产品实例};

工厂方法模式

定义:定义一个创建产品对象的工程接口,将实际创建工作推迟到子类中。。
优点:解决了开闭原则
缺点:如果要增加两个不同的产品,那么需要增加不同的工厂类

结构:

  1. 具体的产品类(定义具体产品的公共接口);
  2. 抽象的产品类(定义具体产品);
  3. 抽象的工厂类
  4. 具体的工厂类

优点:

  1. 符合单一职责;
  2. 符合开闭原则;

缺点:

  1. 一个具体的工厂只能创建一个具体的产品;
  2. 新增产品时,不仅要增加产品类,还需要增加具体的工厂类;

抽象模式

定义:建立一个抽象的工厂类,可以派生出具体的工厂,每个工厂又可以生产多种具体的产品。
优点:
缺点:违反单一职责原则;代码臃肿不易于管理;

策略模式

定义:定义一系列算法,将每个算法封装起来,并让他们可以相互替换。
策略模式角色:环境类context,抽象策略类,具体的策略类。常配合工厂模式一起使用。

结构:

定义抽象策略角色(Strategy);
定义具体策略角色(Concrete Strategy);
定义环境角色(Context):用于连接上下文

缺点

客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
策略模式将造成产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量。

posted @ 2023-08-15 09:57  suntl  阅读(25)  评论(0编辑  收藏  举报