设计模式3-行为型模式

5. 行为型模式

5.1 模板模式(重要)

定义算法框架(纯虚函数),将一些步骤延迟到子类中,如冲茶叶、冲咖啡的步骤。

class DringkTemplate
{
public:
	//煮水,冲泡,倒入,加料
	virtual void BoilWater() = 0;
	virtual void Brew() = 0;
	virtual void PourInCup() = 0;
	virtual void AddSomething() = 0;

	void Make()
	{
		this->BoilWater();
		this->Brew();
		this->PourInCup();
		this->AddSomething();
	}
};

5.2 策略模式

封装一系列算法,而且可相互替换,根据客户而变化。

下面是人物使用武器的例子。


class WeaponStrategy
{
public:
	virtual void Attack() {}// = 0;
};

class Sword : public WeaponStrategy
{};

class AK47: public WeaponStrategy
{};

class Character
{
public:
	void SetWeapon(WeaponStrategy* pWeapon)
	{
		m_pWeapon = pWeapon;
	}
	void UseWeapon()
	{
		m_pWeapon->Attack();
	}
private:
	WeaponStrategy* m_pWeapon;
};

5.3 命令模式

别名,action模式,transaction模式。将请求封装,可排队、记录日志,可撤销。

class HandleClientProtocol
{
public:
	void AddMoney() {}
	void UpdatePlayerLevel() {}
	//...
};

class AbstractRequest
{
public:
	virtual void Handle() = 0;

	AbstractRequest(HandleClientProtocol* pHandleProtocol)
	{
		this->m_pHandleProtocol = pHandleProtocol;
	}
public:
	HandleClientProtocol* m_pHandleProtocol;
};
class AddMoney : private AbstractRequest
{
	virtual void handle()
	{
		m_pHandleProtocol->AddMoney();
	}
};

class Server
{
public:
	void AddRequest(AbstractRequest* pRequest)
	{
		m_queCommands.push(pRequest);
	}
	void start()
	{
		while (!m_queCommands.empty())
		{
			Sleep(2000);
			AbstractRequest* pRequest = m_queCommands.front();
			pRequest->Handle();
			m_queCommands.pop();
		}
	}
private:
	queue<AbstractRequest*> m_queCommands;
};

5.4 观察者模式

观察者对观察目标,就像汽车对信号灯。一个对象状态变化,影响另一个对象,也就是依赖关系。一个目标可对应多个观察者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值