重构获得模式 Refactoring to Patterns
面向对象设计模式是--应对变化,提高复用
重构关键技巧
静态---动态、早绑定---晚绑定、继承---组合、编译时依赖---运行时依赖、紧耦合---松耦合
组件协昨模式
框架(Framwork\lib)与应用的划分,组件协助通过 晚期的绑定,来实现框架和应用之间的松耦合。
典型的模式
Template Method -- 虚函数的多态 -- 你不要调用我,让我调用你 (晚绑定)
Strategy
Observer/Event
动机 Motivation
灵活的应对需求变化的实现。
Template Method
calss library {
public:
void run() {
Step1();
if(step2()) {
step3();
}
for(int i = 0; i<4; i++) {
step4();
}
step5();
}
// 基类 的析构 必须是须的,否则在delete 子类时,不会调用析构。
virtual ~ library() {}
protected:
// 不变的功能
void step1() { }
void step3() { }
void step5() { }
// 变化的--子类去实现
virtual bool step2() = 0;
virtual void step4() = 0;
};
class app : public library {
protected:
virtual bool step2() {
// 重写
}
virtual void step4() {
// 重写
}
};
// -- library 调用 app 中的方法 我们称为早绑定,反之为晚期绑定;
int main() {
library *p = new app();
p->run();
delete p;
};
模式的定义
定义一个操作中算法的骨架(稳定),而将一些步骤延迟(变化)到子类实现。Template Method
使得子类不改变(复用)一个算法的机构,即可以重新定义(override 重写)该算法的某些特定的步骤。