设为首页 加入收藏

TOP

C++设计模式之状态模式(二)(二)
2015-07-20 17:47:33 来源: 作者: 【 】 浏览:7
Tags:设计模式 状态 模式
tionerState * GetNormalTemperatureState(); //获取制冷状态 AirConditionerState * GetRefrigerateState(); //获取制热状态 AirConditionerState * GetHeatState(); //保持常温 void KeepNormalTemperature(); //制冷 void refrigerate(); //制热 void Heat(); }; 空调类实现代码如下:
//构造函数
AirConditioner::AirConditioner(string strAirName, int nTemperature)
{
	m_strAirName = strAirName;
	m_nTemperature = nTemperature;

	m_pNormalTemperatureState = new NormalTemperatureState();
	m_pRefrigerateState = new RefrigerateState();
	m_pHeatState = new HeatState();

	m_pCurState = m_pNormalTemperatureState;
}



//虚构函数
AirConditioner::~AirConditioner()
{
	delete m_pNormalTemperatureState;
	m_pNormalTemperatureState = NULL;

	delete m_pRefrigerateState;
	m_pRefrigerateState = NULL;

	delete m_pHeatState;
	m_pHeatState = NULL;
}
	



//调节温度
void AirConditioner::SetTemperature(int nTemperature)
{
	m_nTemperature = nTemperature;
}



//获取温度
int AirConditioner::GetTemperature()
{
	return m_nTemperature;
}



//设置空调状态
void AirConditioner::SetAirConditionerState(AirConditionerState * pAirConditionerState)
{
	m_pCurState = pAirConditionerState;
}





//获取常温状态
AirConditionerState * AirConditioner::GetNormalTemperatureState()
{
	return m_pNormalTemperatureState;
}




//获取制冷状态
AirConditionerState * AirConditioner::GetRefrigerateState()
{
	return m_pRefrigerateState;
}




//获取制热状态
AirConditionerState * AirConditioner::GetHeatState()
{
	return m_pHeatState;
}





//保持常温
void AirConditioner::KeepNormalTemperature()
{
	m_pCurState->KeepNormalTemperature(this);
	
}




//制冷
void AirConditioner::refrigerate()
{
	m_pCurState->refrigerate(this);
}




//制热
void AirConditioner::Heat()
{
	m_pCurState->Heat(this);
}
测试代码实现如下:
#include 
  
   
#include "AirConditioner.h"

using namespace std;

int main()
{

	AirConditioner * pAirConditioner = new AirConditioner("海尔空调", 25);

	/****************常温状态*************************/
	pAirConditioner->KeepNormalTemperature();

	cout << endl;
	
	/****************制冷状态*************************/
	pAirConditioner->SetTemperature(33);
	pAirConditioner->refrigerate();

	cout << endl;

	/****************制热状态*************************/
	pAirConditioner->SetTemperature(15);
	pAirConditioner->Heat();

	/****************销毁操作*************************/
	delete pAirConditioner;
	pAirConditioner = NULL;

	return 0;
}
  
编译并执行,结果如下:


将具体行为封装在常温状态、制冷状态、制热状态中。空调类(也就是环境类)维持一个当前状态的引用,当客户端调用环境类的方法时,将该调用操作委托给具体状态类。具体状态类实现该状态下的行为,以及控制切换到其他状态。客户端无需直接操作具体的状态类,而是由环境类代为处理,降低了客户端与具体状态类的耦合性。如果需要添加具体的状态类也很容易,只需要继承于抽象状态类并对环境类稍加修改就可以了。另外,也避免了大量if...else臃肿语句,把这些条件判断都封装成一个个状态类。






首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVA 11294 POJ 3648 Wedding 下一篇HNU Round Robin (约瑟夫)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)
·索引堆及其优化 - 菜 (2025-12-24 20:18:50)
·Shell 中各种括号的 (2025-12-24 19:50:39)
·Shell 变量 - 菜鸟教 (2025-12-24 19:50:37)