四、模板方法模式

模板方法:

  • 是对一系列的流程、生命周期等进行抽象,通过将早绑定转换为晚绑定,实现代码的稳定。
  • 站在类库开发者的角度,即“不要调用我,让我来调用你”。类开发者先调用抽象的方法,具体的方法实现由调用者负责。调用者不用去选择性调用开发者写好的方法,调用者只管实现方法即可,无需关注流程。
  • 比如UI窗体的生命周期,线程的生命周期等,流程是固定的,但是在各个生命周期的方法不一定,则可以将不固定的方法作为虚函数留给应用程序具体实现。

实现思路:

  • 比如一个应用程序需要按步骤调用step1()、step2()、step3()、step4()、step5(),分别做一些处理,其中step1()、step3()、step5()是固定不变的,但是step2()、step4()根据不同的业务有不同的实现。
  • 则可以将整个步骤抽象到框架中的run()方法,然后定义虚函数step2()、step4(),留给应用程序具体实现。将变化留给应用程序,稳定则在类中封装起来。
  • 这样就实现了通过晚绑定,框架调用应用程序,而不是应用程序调用框架。

思考:

  • 该模式中变化点是流程中可能不固定的某些方法,通过虚函数即可实现代码稳定。
class Library {
public:
	virtual void step2() = 0;  //变化点
	virtual void step4() = 0;  //变化点
	void step1() { //稳定点
		//do something
	};
	void step3() { //稳定点
		//do something
	};
	void step5() { //稳定点
		//do something
	};
	void run() {  //稳定的流程,调用变化的step2,step3
 //结构化编程里面,应该是在application里面调用library的step1\3\5方法顺序调用,但是这里把“稳定”的部分抽象出来了。
		step1();
		step2();
		step3();
		step4();
		step5();
	}
};
class Application :public Library {
	void step2() {
		 //具体实现
	}
	void step4() {
		//具体实现
	}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值