重构关键技法
(1)静态——动态
(2)早绑定——晚绑定
(3)继承——组合
(4)编译时依赖——运行时依赖
(5)紧耦合——松耦合
组件协作模式:框架与应用程序的划分,组件协作的划分是通过晚绑定,框架与应用程序之间的松耦合,是二者之间协作时候常用的的模式。包括以下三种模式
1、Templete Method
2、Stratage;
3、Observer/Event
模板方法的动机:对于某一项任务,他常常有稳定的整体操作结构,但是各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架和应用之间的关系),而无法和任务的整体结构同时实现。
那么如何在稳定操作结构的情况下,能够灵活应对各个子步骤的变化或者晚期实现需求呢?
代码有俩种对比:第一种是早绑定;第二种是晚绑定;
template_lib_1.h
#pragma once
#include<iostream>
using namespace std;
程序库开发人员
class Library
{
public:
void Step1()
{
//..//
cout << "Library Step1" << endl;
}
void Stemp3()
{
//...//
cout << "Library Step3" << endl;
}
void Stemp5()
{
//...//
cout << "Library Step5" << endl;
}
};
template_lib_1.h
#pragma once
#include<iostream>
using namespace std;
#include"template_lib.h"
//应用程序开发人员
class Application
{
public:
bool Steep2()
{
//...//
cout << "Application Steep2" << endl;
}
void Step4()
{
//...//
cout << "Application Step4" << endl;
}
};
int main()
{
Library lib;
Application app;
lib.Step1();
app.Steep2();
lib.Stemp3();
app.Step4();
lib.Stemp5();
return 0;
}
template_app_2.h
#pragma once
#include<iostream>
#include"template_lib_2.h"
using namespace std;
class Application :public Library
{
public:
bool Step2()
{
//...//
cout << "Application Step2" << endl;
return true;
}
void Step4()
{
cout << "Application Step4" << endl;
}
};
template_lib_2.h
#pragma once
#include<iostream>
using namespace std;
class Library
{
public:
virtual bool Step2()=0;
virtual void Step4()=0;
public:
void Run()
{
Step1();
Step2();
Step3();
Step4();
Step5();
}
protected:
void Step1()
{
cout << "Library Step1" << endl;
}
void Step3()
{
cout << "Library Step3" << endl;
}
void Step5()
{
cout << "Library Step5" << endl;
}
public:
virtual ~Library()
{}
};
通过这俩种比较:
第一种是主流程在应用程序那里;
第二种是主流程在开发人员那里;
这俩主要用的是继承和虚函数;