重构关键技法
- 静态 --> 动态
- 早绑定 --> 完绑定
- 继承 --> 组合
- 编译时依赖 --> 运行时候依赖
- 紧耦合 --> 松耦合
使用动机:
在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。如何在确定稳定操作结构的前提下,来灵活对应各个子步骤的变化或者晚期实现需求。
class Library
{
public:virtual ~Library() { }// 稳定 模板方法void Run(){Step1();if (Step2()){Step3();}Step4();Step5();}protected:void Step1() { } // 稳定void Step3() { } // 稳定void Step5() { } // 稳定protected:virtual bool Step2() = 0; // 支持变化,由子类实现virtual void Step4() = 0; // 支持变化,由子类实现
};class Application : public Library
{
public:virtual bool Step2() { return true; }virtual void Step4() { }
};int main(array<System::String ^> ^args)
{Library *pLib = new Application();pLib->Run();delete pLib;return 0;
}