设计模式(行为型)之模板模式

一、桥接模式与抽象类
       通常在“既要约束子类的行为,又要为子类提供公共功能”的时候使用抽象类。
按照这个原则来思考模板方法模式的实现,模板方法模式需要固定定义算法的骨架,
这个骨架应该只有一份,算是一个公共的行为,但是里面具体的步骤的实现又可能是
各不相同的,恰好符合选择抽象类的原则。
变与不变
程序设计的一个很重要的思考点就是“变与不变”,也就是分析程序中哪些功能是可
变的,哪些功能是不变的,把不变的部分抽象出来,进行公共的实现,把变化的部分
分离出去,用接口来封装隔离,或用抽象类来约束子类行为。
模板方法模式很好的体现了这一点。模板类实现的就是不变的方法和算法的骨架,而
需要变化的地方,都通过抽象方法,把具体实现延迟到子类,还通过父类的定义来约
束了子类的行为,从而使系统能有更好的复用性和扩展性。
• 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以
不改变一个算法的结构即可重定义该算法的某些特定步骤

 

二、类图

 

 

 

三、代码实现

#include <iostream>
using namespace std;

//PC机,手机,平板
class MakeOrder {
public:
	//virtual void startOrder() =0;第一版
	//钩子函数的模板方法
	virtual void startOrder() {
		cout << "下订单了" << endl;
	}
	virtual void replyStart()=0;
	//.....
	virtual void finishOrder()=0;
	virtual void replyFinish()=0;
	//模板模式
	void make() {
		startOrder();
		replyStart();
		finishOrder();
		replyFinish();
	}
protected:
	MakeOrder(){}
};

class Fanuc :public MakeOrder {
public:
	void startOrder() {
		cout << "Fanuc开始接受订单" << endl;
	}
	void replyStart() {
		cout << "Fanuc做好预备,请将后继订单进入排队" << endl;
	}
	//.....
	 void finishOrder() {
		 cout << "本次Fanuc订单已经完成,请推进下个订单进入生产" << endl;
	}
	 void replyFinish() {
		 cout << "Fanuc订单信号已经送达,即将推进下个订单进入生产" << endl;
	 }
};

class Sims :public MakeOrder {
public:
	void startOrder() {
		cout << "Sims开始接受订单" << endl;
	}
	void replyStart() {
		cout << "Sims做好预备,请将后继订单进入排队" << endl;
	}
	//.....
	void finishOrder() {
		cout << "本次Sims订单已经完成,请推进下个订单进入生产" << endl;
	}
	void replyFinish() {
		cout << "Sims订单信号已经送达,即将推进下个订单进入生产" << endl;
	}
};

class Mits :public MakeOrder {
public:
	
	void replyStart() {
		cout << "Sims做好预备,请将后继订单进入排队" << endl;
	}
	//.....
	void finishOrder() {
		cout << "本次Sims订单已经完成,请推进下个订单进入生产" << endl;
	}
	void replyFinish() {
		cout << "Sims订单信号已经送达,即将推进下个订单进入生产" << endl;
	}
};

int main(void) {
	//MakeOrder* pMakeOrder = new Fanuc;
	//pMakeOrder->make();
	MakeOrder* pMakeOrder = new Mits;
	pMakeOrder->make();
	system("pause");
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值