模板方法
早绑定 -> 晚绑定, 设计模式的假设是设计模式有稳定点。
早绑定
有lib和application,application调用lib, lib中方法。
main {
lib->step1()
if (app.step2()) {
lib->step2()
}
lib->step3()
}
晚绑定
假定run的结构是稳定的,定好了骨架,子类实现骨架,开放虚函数继承。
lib {
run() {
lib -> step1()
if (step2()) {
}
lib - step3();
}
virtual step2() = 0;
}
main {
lib xx = new applicaiton();
xx -> run();
}
稳定和变化部分
策略模式
例子, 问题在于如果要增加新的税法需要增加if,违反了开闭原则。
if (tax == us_tax) {
} else if (tax == cn_tax) {
} else if (tax == eg_tax) {
}
税法策略实现
- 算法可以互相替换 (算法支持变化)
- if-else 霰弹修改 只有if-else绝对不变的情况,不要考虑策略模式