思考设计模式在自助终端软件上的应用 ——Observer(观察着)模式

主要思想:将各硬件模块作为观察者加入观察者队列,当机器状态改变时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); } 

稍微留一张以前做过的图 ,:-)

 

转载于:https://www.cnblogs.com/dongzhiquan/archive/2009/08/07/1994752.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机考研新大纲,2020考研计算机新大纲考情分析

随着2020年408统考大纲的发布&#xff0c;我们可以看到&#xff0c;只字未改&#xff0c;这样对大家在准备408备考上可以松一口气&#xff0c;在之后10月份报名的时候可选率非常大。接下来我们来看下考试的目标&#xff0c;涵盖了计算机数据结构、计算机组成原理、操作系统和计…

Visual studio 打包

Visual studio 打包2009-08-07 11:171.打开要打包的“.lsn”文件&#xff0c;在“解决方案资源管理器”中随便打开一个窗口 2.菜单栏“文件”--->“添加”--->“新建项目” 3. 点击“项目类型”--->“其他项目类型”--->“安装和部署”&#xff0c;再在“模板”点击…

MySQL 性能优化的最佳20多条经验分享

当我们去设计数据库表结构&#xff0c;对操作数据库时&#xff08;尤其是查表时的SQL语句&#xff09;&#xff0c;我们都需要注意数据操作的性能。这里&#xff0c;我们不会讲过多的SQL语句的优化&#xff0c;而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧…

计算机音乐一次就好歌词,沈腾歌曲一次就好歌词

你是不是在找沈腾的一次就好的歌词&#xff1f;下面是学习啦!让小编我来告诉你关于一次就好的歌词的一些相关的资料吧&#xff0c;希望能对你有用!沈腾歌曲一次就好的歌词想看你笑 想和你闹想拥你入我怀抱上一秒红着脸在争吵下一秒转身就能和好不怕你哭 不怕你叫因为你是我的骄…

RabbitMQ(2) 一般介绍

RabbitMQ 即一个消息队列&#xff0c;主要是用来实现应用程序的异步和解耦&#xff0c;同时也能起到消息缓冲&#xff0c;消息分发的作用。 消息中间件在互联网公司的使用中越来越多&#xff0c;刚才还看到新闻阿里将RocketMQ捐献给了apache&#xff0c;当然了今天的主角还是讲…

Cisco 3550-EMI 交 换 机 配 置 教 程

目录&#xff1a;一、标识交换机二、设置口令及用户三、配置VTP&#xff08;Vlan中继协议&#xff09;四、配置中继线&#xff08;Trunk&#xff09;五、创建、描述Vlan及设置Vlan IP六、划分、描述及设置Vlan端口七、配置STP&#xff08;生成树协议&#xff09;八、启用Vlan间…

struct1标签使用方法笔记

1.<html:text property"" name"">其中property对应作用域变量的属性,name对应作用域里的变量,如果NAME没有,则property里第一个点号[这时至少要有一个点]之前的作为作用域变量.property最后生成了INPUT标签的NAME属性.所以property是必须的.2.<ht…

cop2000计算机组成原理,COP2000计算机组成原理实验系统

COP2000计算机组成原理实验系统3. 万用汇编器用户可以自定义指令/微指令系统&#xff0c;COP2000软件可以对用户自己定义的汇编助记符进行编译&#xff0c;自动生成代码/微代码。实验系统出厂时提供了完善的指令系统&#xff1a;算术运算&#xff1a;ADD、ADDC、SUB、SUBC 逻辑…

python--Websocket实现, 加密 sha1,base64

需要用到gevent-websocket包,这里我们用下图这个 一.websocket简单实现 ep1.py from geventwebsocket.handler import WebSocketHandler from gevent.pywsgi import WSGIServer from geventwebsocket.websocket import WebSocket # 引这个模块为了注释中显示提示用from flask i…

[工具] 解决sublime text运行javascript console无输出问题

1、使用nodeJS在sublime text 运行javascript 下载安装nodeJS在sublime text新建build system&#xff1a;tools->build system->new build system…&#xff0c;输入代码&#xff1a;{ "cmd": ["node", "$file"], "selector"…

计算机考试怎么复制粘贴文件,复制粘贴,教您电脑复制粘贴不能用了怎么解决...

操作电脑过程中经常需要复制、粘贴文字或图片&#xff0c;直接点击右键就可以操作的。但是使用过程中难免遇到一些故障问题导致右键复制粘贴功能无法使用&#xff0c;有些是软件引起的&#xff0c;有些是硬件引起的&#xff0c;怎么解决&#xff1f;下面&#xff0c;小编给大家…

第43周三

晚上下班等公交回去&#xff0c;今天效率还行&#xff0c;但没让培训让我更清醒自己目前在最高领导心中的印象&#xff0c;让我必须更清醒思考自己未来的出路&#xff0c;上午完成了产品需求初稿&#xff0c;下午搭建了总体设计框架&#xff0c;晚上看了几篇前端面试题&#xf…

为什么而设计

当然是为实现功能而设计, 这句话没错. 但是还不够, 针对具体的应用场合, 应该采取不同的设计策略. 例如GUI Client程序, 必须重点注意用户的体验, 为提高易用性而设计 而一般后台应用程序, 就必须在高性能和可靠性方面加强设计 只创建一次的对象, 我们不必在乎其构造时间, 而频…

认识因特网络(小学计算机课件),小学信息技术认识因特网ppt课件.ppt

《小学信息技术认识因特网ppt课件.ppt》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《小学信息技术认识因特网ppt课件.ppt(9页珍藏版)》请在人人文库网上搜索。1、1.你们知道从什么上获得新闻最新最快&#xff1f; 2.你们知道什么样的信件传的最快&#xff1f; 3.你…

delphi基本语法

//delphi中exit,abort,break,continue 的区别exit: 退出函数体abort: 遇到异常,安静处理,就是不显示不提示break: 退出当前循环体,包括for ,while, repeat等循环体continue: 结束循环内的本次处理,继续从循环体的开始位置继续执行Exit 是跳出当前代码块&#xff0c;也就是当前函…

easy-ui的datagrid

<div id"magazineGrid"></div> <script> $(#magazineGrid).datagrid({height: 340,//在创建完成后会根据url请求数据&#xff0c;通过ajax完成url: <c:url value"/kpOutSystem/view.do?opgetList"/>, method: POST,queryParams…

【未解决】Reporting Services报表在浏览器中的显示

今天把微软的报表重新部署一遍&#xff0c;发现在不同的浏览器中&#xff0c;显示的尺寸大小不一样。在IE8浏览器中是正常的&#xff1a;而在火狐浏览器中却始终只有全屏的四分之一大小&#xff0c;无论在报表中如何修改尺寸也没有变化。看起来&#xff0c;应该是在浏览器的什么…

纽大计算机博士,斑马博士捷报|纽约大学 (NYU) MSc Computer Engineering 计算机工程硕士录取...

原标题&#xff1a;斑马博士捷报|纽约大学 (NYU) MSc Computer Engineering 计算机工程硕士录取马博士 (Dr. Zebra, Since 2010)&#xff0c; 10年来深受海内外名校申请者的青睐&#xff01;“定制化" 助你被“高于自身背景”的名校录取&#xff01;斑马博士、斑马博士留学…

转:靠谱的代码和DRY

http://www.cppblog.com/vczh/archive/2014/07/15/207658.html 靠谱的代码和DRY上次有人来要求我写一篇文章谈谈什么代码才是好代码&#xff0c;是谁我已经忘记了&#xff0c;好像是AutoHotkey还是啥的专栏的作者。撇开那些奇怪的条款不谈&#xff0c;靠谱的 代码有一个共同的特…

omitting directory `folder/'

题记&#xff1a;一个问题&#xff0c;若遇见第一次&#xff0c;不知道如何解决&#xff0c;经查资料后处理掉可以原谅&#xff1b;若遇见第二次&#xff0c;还是一头雾水&#xff01;反省自己&#xff0c;特此备录。 在linux CentOS6.5 系统中复制文件夹时提示如下&#xff1a…