c++ 设计模式23讲之模板方法模式

模板方法模式

定义:

定义一个操作中算法的框架,而将一些步骤延迟到子类

优点:

(1)通过派生类覆盖父类的方法来实现反向控制结构

(2)模板方法提供一种代码复用技术

缺点:

(1)需为每一个基本方法实现一个子类,如果父类可变方法多将导致类的个数增加

使用范围:

提供一套算法框架,将具体细节实现步骤延迟到子类

结构:

template_method_pattern:模板抽象类

concrete_template:具体模板类

 

实现:

namespace behavioral_pattern
{
	class template_method_pattern
	{
	public:
		void master()
		{
			step1();
			if (ishook())
			{
				step2();
			}
			step3();
		}
		void step1() { std::cout << "这是具体方法" << std::endl; }
		virtual bool ishook() = 0;
		virtual void step2() = 0;
		virtual void step3() = 0;
	};

	class concrete_template : public template_method_pattern
	{
		virtual bool ishook() override
		{
			std::cout << "这是钩子方法" << std::endl;
			return true;
		}
		virtual void step2() override
		{
			std::cout << "这是抽象方法step2方法,验证钩子方法" << std::endl;
		}
		virtual void step3() override
		{
			std::cout << "这是抽象方法step3方法" << std::endl;
		}
	};
}

测试:

基于GoogleTest 的单元测试框架;框架可参考如下网址:

https://www.cnblogs.com/jycboy/p/gtest_catalog.html

using namespace behavioral_pattern;
TEST(test_template_method_pattern, success_templete_method)
{
	concrete_template concrete;
	concrete.master();
}

总结

(1)模板方法模式只用到了继承技术

(2)分别对待抽象方法、钩子方法、具体方法

(3)模板抽象类实现算法框架、具体派生类实现了细节,客户端通过派生类来调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值