1.模板方法模式

晚绑定机制:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
使用场景
1.多个子类有公有的方法,且逻辑基本相同时;
2.重要,复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现;
3.重构时,把相同的代码提取到父类中,然后通过钩子函数约束其行为。

#include<iostream>
#include<string>
#include<fstream>
using namespace std;

class HummerModel {
public:
	virtual void start() {}
	virtual void stop() {}
	virtual void alarm() {}
	virtual void engineBoom() {}
	virtual bool is_alarm() {	//钩子方法,喇叭默认会响
		return true;
	}
	virtual void run() final {	//子类不可覆盖
		start();
		engineBoom();
		if(is_alarm())
			alarm();
		stop();
	}
};
class HummerH1Model :public HummerModel {
	bool alarm_flag;
public:
	void start() {
		cout << "H1 start" << endl;
	}
	void stop() {
		cout << "H1 stop" << endl;
	}
	void alarm() {
		cout << "H1 alarm" << endl;
	}
	void engineBoom() {
		cout << "H1 engineBoom" << endl;
	}

	bool is_alarm() {	//喇叭默认不响 (重写了父类is_alarm方法)
		return false;
	}
};

class HummerH2Model :public HummerModel {
public:
	void start() {
		cout << "H2 start" << endl;
	}
	void stop() {
		cout << "H2 stop" << endl;
	}
	void alarm() {
		cout << "H2 alarm" << endl;
	}
	void engineBoom() {
		cout << "H2 engineBoom" << endl;
	}


};
int main()
{
	HummerModel* h1 = new HummerH1Model;
	HummerModel* h2 = new HummerH2Model;
	h1->run();
	cout << "-----------------------------" << endl;
	h2->run();
	return 0;

	/*
	输出:
		H1 start
		H1 engineBoom
		H1 stop
		---------------------------- 
		H2 start
		H2 engineBoom
		H2 alarm
		H2 stop
	
	*/
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值