大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
组件协作
现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,”组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是两者之间协作时常用的模式
典型模式
- Template Method
- Strategy
- Observer / Event
动机
在软件构造过程中,对某一项任务,它常常有稳定的的整体操作骨架,但各个子步骤 却有很多改变的需求,或者由于固有的原因,(比如框架和应用之间的关系)而无法和任务的整体结构同时实现
如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或晚期实现需求?
案例
使用模板方法前
//程序开发人员
class Library
{
private:
public:
void step1(){
//..
}
void step3(){
//..
}
void step5(){
//..
}
};
//应用程序开发人员
class Application
{
public:
bool step2(){
//..
}
bool step4(){
//..
}
};
int main(){
Library lib();
Application app();
lib.Step1();
if(app.Step2()){
lib.Step3();
}
for(int i = 0;i < 4;i ++){
app.Step4();
}
lib.Step5();
}
使用模板方法后
//程序库开发人员
class Library
{
private:
public:
//稳定 template method
void Run(){
Step1();
if(Step2()){
//支持变换==>虚函数的多态调用
Step3();
}
for(int i = 0;i < 4;i ++){
Step4();//支持变化//==>虚函数调用多态
}
Step5();
}
virtual ~Library(){
};
protected:
void Step1(){
//稳定
//..
}
void Step3(){
//稳定
//..
}
void Step5(){
//稳定
//..
}
virtual bool Step2() = 0;//变换
virtual bool Step4() = 0;//变换
};
//应用程序开发人员
class Application
{
protected:
virtual bool Step2(){
//..子类重写
}
virtual bool Step4(){
//..子类重写
}
};
int main(){
Library * Plib = new Application();
lib-Run();
delete Plib;
}
模式定义
定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override重写)该算法的某些特定步骤
重要总结
- Template Method模式是一种非常基础的设计模式,再面向对象系统中有大量的应用,它用最简洁的机制(虚函数的多态),为很多应用程序框架提供了灵活的扩展点,是代码复用方面的实现结构。
- 除了可以灵活应对子步骤的变换外,“不要调用我,让我来调用你”的反向控制结构Template Method的典型应用
- 在具体实现方面,被Template Method调用的虚方法可以实现,也可以没有任何实现(抽象方法,纯虚方法)一般设置他们为protected方法。
笔记
- 扩展点:继承+虚函数就是扩展
- 反向控制结构“不要调用我,让我来调用你” –> library调用用户代码 晚绑定
- 函数指针也是晚绑定机制
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168515.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...