C/C++基础知识点——设计原则及设计模式
如何实现模块间高内聚、低耦合?
- 封装与抽象;
- 添加中间层;
- 模块化;
- 设计思想与原则
- 单一职责;
- 接口隔离原则;
- 依赖倒置;
- 迪米特原则;
- 多用组合少用继承;
- 设计模式:观察者模式
设计原则及设计模式
六大设计原则:
单一职责原则;里氏替换原则;开闭原则;依赖倒置原则;接口隔离原则;最少知识原则。
23种设计模式:
建造型
单例模式;工厂模式;建造者模式;原型模式(不常用)
结构型
[常用模式] 代理模式;桥接模式;装饰模式;适配器模式;
[不常用模式] 外观模式;组合模式;享元模式;
行为型
[常用模式] 观察者模式;模板模式;策略模式;职责链模式;迭代器模式;状态模式;
[不常用模式] 访问者模式;备忘录模式;命令模式;解释器模式;中介模式;
单一职责原则:
类或者模块的职责保持单一,即一个类或者一个模块尽可能只做一件事(对于函数同样使用)
尽量避免:
- 类中代码行数、函数或属性过多;
- 类依赖其他类过多;
- 私有方法过多;
- 类中大量方法都集中用于操作类的某一属性;
开闭原则:
对扩展开放,对修改关闭
子类的设计要保证在替换父类的时候,不改变原有程序的逻辑以及不破坏原有程序的正确性。
迪米特原则:
实现代码的“高内聚,低耦合”。
- 不该有直接依赖关系的类之间,不要有依赖;
- 有依赖关系的类之间,尽量只依赖必要的接口;
- 减少类之间的耦合,让代码越来越独立
简单工厂模式(静态工厂方法模式)
定义:定义一个类用来创建其它类的实例,被创建的实例通常都具有公共的父类。
优点:无须知道所创建的具体产品的名字,只需要知道具体产品类对应的参数
缺点:
- 随着类的产品的增加,类的职责越来越大;
- 某些产品的增加,需要不断地修改工厂类,增加响应判断逻辑,不利于后期代码维护和扩展(打破了开闭原则);
简单工厂模式为了解决什么问题?
- 为了提高代码高内聚和低耦合;
- 父类中不知道实例化那一具体的子类;
解决问题
将类实例化操作与使用对象的操作分离,让使用者不知道具体参数就可以实例化出所需要的产品类,实现了解耦;
简单工厂模式结构:
- 具体的产品类(定义具体产品的公共接口);
- 抽象的产品类(定义具体产品);
- 工厂{通过创建静态方法传入不同参数从而创建不同的具体产品实例};
工厂方法模式
定义:定义一个创建产品对象的工程接口,将实际创建工作推迟到子类中。。
优点:解决了开闭原则
缺点:如果要增加两个不同的产品,那么需要增加不同的工厂类
结构:
- 具体的产品类(定义具体产品的公共接口);
- 抽象的产品类(定义具体产品);
- 抽象的工厂类
- 具体的工厂类
优点:
- 符合单一职责;
- 符合开闭原则;
缺点:
- 一个具体的工厂只能创建一个具体的产品;
- 新增产品时,不仅要增加产品类,还需要增加具体的工厂类;
抽象模式
定义:建立一个抽象的工厂类,可以派生出具体的工厂,每个工厂又可以生产多种具体的产品。
优点:
缺点:违反单一职责原则;代码臃肿不易于管理;
策略模式
定义:定义一系列算法,将每个算法封装起来,并让他们可以相互替换。
策略模式角色:环境类context,抽象策略类,具体的策略类。常配合工厂模式一起使用。
结构:
定义抽象策略角色(Strategy);
定义具体策略角色(Concrete Strategy);
定义环境角色(Context):用于连接上下文
缺点
客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
策略模式将造成产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量。
本文来自博客园,作者:suntl,转载请注明原文链接:https://www.cnblogs.com/stlong/p/17629215.html