八大原则
- 依赖倒置原则:高层次的代码(稳定)不应该依赖低层次的代码(变化)、抽象的代码不应该依赖具体的代码。
- 开放封闭原则:类模块应该开放扩展的,而其原先的代码尽量封闭不可改变。
- 单一职责原则:一个类应该仅有一个变化的原因,该变化隐含了它的职责,职责太多时会导致扩展时对代码东拉西扯,造成混乱。
- 替换原则:子类必须能够替换它的基类(IS-A),继承可以表达类型抽象。
- 接口隔离原则:接口应该小而完备,不该强迫用户使用多余的方法。
- 优先使用组合而不是继承:继承通常会让子类和父类的耦合度增加、组合的方式只要求组件具备良好定义的接口。
- 封装变化点:
- 针对接口编程,而不是针对实现编程。
通过重构判断采用何种模式
1.模板模式
2.策略模式
90% 遇到 if - else if - else或者 switch 的情况时,都需要考虑要不要将其转换为策略模式。
因为 if-else 的做法会导致主流程(骨架)的代码变得臃肿,容易违反开放封闭原则,每次阅读骨架代码时都需要速览与目标条件无关的其它分支,策略模式能够起到作用:减少阅读其它分支时间、当编写某个“策略”时、更能集中注意力、更易扩展且避免破坏骨架。
// A code block
enum TaxBase {
CN_Tax,
US_Tax,
DE_Tax,
FR_Tax //更改
};
class SalesOrder{
TaxBase tax;
public:
double CalculateTax(){
//...
if (tax == CN_Tax){
//CN***********
}
else if (tax == US_Tax){
//US***********
}
else if (tax == DE_Tax){
//DE***********
}
else if (tax == FR_Tax){ //更改
//...
}
//....
}
};
3.观察者模式
4.装饰模式
5.桥模式
对象创建模式
6.工厂方法模式
7.抽象工厂模式
8.原型模式
9.构建器模式
对象性能模式
10.单件模式
11.享元模式
接口隔离模式
12.门面模式
13.代理模式
14.适配器模式
15.中介模式
状态变化模式