设计模式3-行为型模式

文章目录

  • 5. 行为型模式
    • 5.1 模板模式(重要)
    • 5.2 策略模式
    • 5.3 命令模式
    • 5.4 观察者模式

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 观察者模式

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

你可能感兴趣的:(设计模式)