组件协作模式

49 阅读1分钟

模板方法

早绑定 -> 晚绑定, 设计模式的假设是设计模式有稳定点。

早绑定

有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();
}

稳定和变化部分

image.png

策略模式

例子, 问题在于如果要增加新的税法需要增加if,违反了开闭原则。

if (tax == us_tax) {

} else if (tax == cn_tax) {

} else if (tax == eg_tax) {

}

税法策略实现

  • 算法可以互相替换 (算法支持变化)

image.png

image.png

  • if-else 霰弹修改 只有if-else绝对不变的情况,不要考虑策略模式