设计模式——模板方法

模板方法

模板方法模式,常常使用在框架(库)的设计中;
程序的执行流程是稳定的,但是具体的执行步骤是可变的

例如:

  • 在QWidget框架中,Qt框架有一套自己的绘制流程, 在合适的时候,会去调用QWidget的paintEvent() 函数,但是具体paintEvent() 函数是怎样绘制,Qt框架并不关心,这就是一个典型的模板方法
    稳定的是QWidget框架的执行流程,变化的是 paintEvent() 函数的具体实现

示例代码:

Class Library
{
public:
	void run()
	{
		setp1();
		if (step2())
		{
			step3();
		}
		for (int i = 0; i < 10; ++i)
		{
			step4();
		}
		step5();
	}
private:
	bool setp1(){ //todo }
	void step3(){ //todo }
	void step5(){ //todo }
protected:
	bool setp2() = 0;
	void step4() = 0;
}

class Application : public Library
{
protected:
	bool step2() override { //todo }
	void step4() override { //todo }
}

int main
{
	Library* lib = new Application();
	lib->run();
}

这里稳定的是run() 方法中的执行流程,不管是Application 还是 Application2,或是任意一个子类,都是先执行 step1(),然后判断 step2(),根据结果执行step3(), 最后再执行setp4() 和 step5();
所以可以将这个稳定的流程封装在基类中,将变化开放给子类去动态实现;此为Template Method

例如上述例子中的QWidget,将整个绘制流程封装在库中,Qt会在合适的时机来调用paintEvent() 进行绘制,至于具体这个绘制方法中怎样实现,是动态变化的,这一块变化的部分交不同子类运行时实现

我们平时遇到的 注册回调函数的机制,也可以理解为一种模板方法,也是底层框架代码中包含固定的执行流程(稳定),将变化的部分,使用回调函数的形式,由应用层注册而来,在运行时候动态可变

工作中的运用

ICommand类
在这里插入图片描述
这里 ICommand的execute()方法中,执行的流程是稳定的,都是先做具体动作(doCommand()),再判断是否需要存储配置(needUpdateConfig()),最后执行配置的存储动作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值