思考设计模式在自助终端软件上的应用 ——Observer模式
2009-03-16 22:04
387 查看
主要思想:将各硬件模块作为观察者加入观察者队列,当机器状态改变时Notify所有观察者,各观察者根据消息类型做不同反应或不作反应。
下面贴出代码简单实现,希望引起圈内朋友的关注,起到抛砖引玉的效果。
下面两个类是两个基类.
class CObserver
{
public:
CObserver();
virtual ~CObserver();
public:
virtual void Update(HouEvent nEvent)=0;
};
class CSubject
{
public:
CSubject();
virtual ~CSubject();
public:
void Attach(CObserver * pObserver); // 增加观察者
void Detach(CObserver * pObserver); // 移除观察者
void NotifyAll(HouEvent nEvent); // 通知
private:
list<CObserver*> m_ObserverList;
};
常用的状态,各设备接收到状态信息作出不同反应.
enum HouEvent
{
HOU_Powerup = 1001, // 启动模式
HOU_InService, // 服务模式
HOU_Suspend, // 暂停服务
HOU_Maintenance, // 维护模式
HOU_Closed, // 关闭服务
};
以下是派生类:
class CMachine : public CSubject
{
public:
CMachine();
virtual ~CMachine();
void InitMachine();
void SetState(HouEvent nEvent);
// HouEvent GetState();
protected:
CCRP * m_pCRP;
CPIN * m_pPIN;
CRCW * m_pRCW;
};
下面是几个设备类,作为例子,只使用了3个设备,设备函数也只列举了几个:
class CCRP : public CObserver
{
public:
CCRP();
virtual ~CCRP();
public:
// 初始化
int InitDev();
// 重启
int Reset();
// 打印
int Print();
virtual void Update(HouEvent nEvent);
};
class CPIN : public CObserver
{
public:
CPIN();
virtual ~CPIN();
public:
// 初始化
int InitDev();
// 重启
int ResetDev();
// 输入密码
int InputPin();
// 输入明文
int InputClear();
virtual void Update(HouEvent nEvent);
};
class CRCW : public CObserver
{
public:
CRCW();
virtual ~CRCW();
public:
virtual void Update(HouEvent nEvent);
};
客户端代码:
void main()
{
// CSubject subject;
CMachine Machine;
Machine.InitMachine();
// Attach应该在CSubject的派生类里调
Machine.SetState(HOU_Powerup);
Machine.SetState(HOU_InService);
Machine.SetState(HOU_Maintenance);
}
运行结果如下:
下面贴出代码简单实现,希望引起圈内朋友的关注,起到抛砖引玉的效果。
下面两个类是两个基类.
class CObserver
{
public:
CObserver();
virtual ~CObserver();
public:
virtual void Update(HouEvent nEvent)=0;
};
class CSubject
{
public:
CSubject();
virtual ~CSubject();
public:
void Attach(CObserver * pObserver); // 增加观察者
void Detach(CObserver * pObserver); // 移除观察者
void NotifyAll(HouEvent nEvent); // 通知
private:
list<CObserver*> m_ObserverList;
};
常用的状态,各设备接收到状态信息作出不同反应.
enum HouEvent
{
HOU_Powerup = 1001, // 启动模式
HOU_InService, // 服务模式
HOU_Suspend, // 暂停服务
HOU_Maintenance, // 维护模式
HOU_Closed, // 关闭服务
};
以下是派生类:
class CMachine : public CSubject
{
public:
CMachine();
virtual ~CMachine();
void InitMachine();
void SetState(HouEvent nEvent);
// HouEvent GetState();
protected:
CCRP * m_pCRP;
CPIN * m_pPIN;
CRCW * m_pRCW;
};
下面是几个设备类,作为例子,只使用了3个设备,设备函数也只列举了几个:
class CCRP : public CObserver
{
public:
CCRP();
virtual ~CCRP();
public:
// 初始化
int InitDev();
// 重启
int Reset();
// 打印
int Print();
virtual void Update(HouEvent nEvent);
};
class CPIN : public CObserver
{
public:
CPIN();
virtual ~CPIN();
public:
// 初始化
int InitDev();
// 重启
int ResetDev();
// 输入密码
int InputPin();
// 输入明文
int InputClear();
virtual void Update(HouEvent nEvent);
};
class CRCW : public CObserver
{
public:
CRCW();
virtual ~CRCW();
public:
virtual void Update(HouEvent nEvent);
};
客户端代码:
void main()
{
// CSubject subject;
CMachine Machine;
Machine.InitMachine();
// Attach应该在CSubject的派生类里调
Machine.SetState(HOU_Powerup);
Machine.SetState(HOU_InService);
Machine.SetState(HOU_Maintenance);
}
运行结果如下:
相关文章推荐
- 思考设计模式在自助终端软件上的应用 ——Observer(观察着)模式
- 思考设计模式在自助终端软件上的应用 ——Observer(观察着)模式
- 消息订阅、派送设计模式在“平台-插件”式软件架构设计中的应用
- 微软的模式与实施方案团队发布云托管应用软件的设计模式
- 关于软件架构设计的一些思考--通用架构设计模式
- 论设计模式在软件开发中的应用
- Java---设计模式app小软件汇总应用
- 设计模式在软件系统中的应用(一)之订阅模式
- 设计模式在软件应用系统开发中的实战参考
- 论设计模式在软件开发中的应用
- Java---设计模式app小软件汇总应用
- 论设计模式在软件开发中的应用
- 从软件隐喻到设计模式的思考(thinking in software metaphors)
- 论设计模式在软件开发中的应用
- 设计模式 - 在软件开发中的应用
- 关于软件架构、设计模式和应用框架的一点看法
- 设计模式在软件应用系统开发中的实战参考
- 设计模式在软件应用系统开发中的实战参考
- iOS应用设计模式开发中对简单工厂和工厂方法模式的运用
- 关于oracle公司设计软件如oracle数据库软件等的思想模式杂记【收集中】