思考设计模式在自助终端软件上的应用 ——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
思考设计模式在自助终端软件上的应用 ——Observer(观察着)模式相关推荐
- 连接linux系统软件,Windows系统上有哪些不错的终端软件可以远程连接Linux?
PuTTY文章介绍:https://www.toutiao.com/i6631146607595241991/ PuTTY 是一款集成虚拟终端.系统控制台和网络文件传输为一体的自由及开放源代码的程序. ...
- 实践GoF的23种设计模式:SOLID原则(上)
本文分享自华为云社区<实践GoF的23种设计模式:SOLID原则(上)>,作者:元闰子. 前言 从1995年GoF提出23种设计模式到现在,25年过去了,设计模式依旧是软件领域的热门话题. ...
- 终端软件升级功能开发_5个很棒的终端技巧可帮助您升级为开发人员
终端软件升级功能开发 There are plenty of beginner tutorials around that help you learn command line basics, su ...
- 终端软件_DMSTerminal现场管控终端软件正式发布
目前军工企业的信息化建设及管理大多停留在企业内部的管理层,各种任务信息.作业流程等无法直接下达到真正的一线现场层,导致工作在一线的大量技术人员仍然使用传统的纸质工单.纸质记录.口头交流等工作模式进行现 ...
- IAP:物联网终端软件升级技术
本文分享自华为云社区<物联网终端软件升级技术---IAP(因芯片类型较多,本文仅针对STM32的Cortex-M系列)>,原文作者:o0龙龙0o . 现在升级已经成为IoT领域边缘升级的基 ...
- 鸿蒙生态箐英班,华为联合西北工业大学开设 “鸿蒙生态菁英班”: 50 人左右,锁定终端软件领域...
7月5日消息 西北工业大学官方近期宣布,为深入推进校企联合培养,激发同学们在终端软件领域的技术热忱,华为联合西北工业大学开设 "鸿蒙生态菁英班",旨在培养具有终端专业知识,热爱终端 ...
- 设计模式:可复用面向对象软件的基础
文章目录 设计模式 设计模式有4个基本要素 23个设计模式 设计模式分类 目的准则 范围准则 导致重新设计的一般原因,以及解决这些问题的设计模式举例 设计模式所支持的设计的可变方面 设计模式背后的6大 ...
- 基于C#的超市收银终端软件--小孩玩具
基于C#的超市收银终端软件–小孩玩具 需求 小孩玩过家家,希望开一个超市,收银管理部分希望是自动化的. • 所有商品都贴上条形码. • 用条形码扫描枪扫描商品,软件能知道条形码对应的商品名称和价格. ...
- 【原创】终结选择困难,Xshell、MobaXterm、PuTTY、SecureCRT 多款 SSH 终端软件该怎么选
文章目录 软件选取原则 对比表 各软件优势 曝光的安全事件 总结 其他同类软件 软件选取原则 windows 下可用于 ssh 连接的终端软件有很多,本人会根据以下几个原则来进行对比选择: 简单好用. ...
最新文章
- JQuery中全局变量和局部变量的理解
- A站被黑,你应该做些什么?
- Bootstrap下拉菜单组件
- 阿里达摩院科学家,3年造出小蛮驴!量产物流机器人,完全自动驾驶,4度电跑100公里...
- 青龙羊毛——某世界扶持及新脚本
- 怎么判断一个字符串的最长回文子串是否在头尾_LeetCode5:最长回文子串
- [转:有种感觉叫佩服]一个程序员的奋斗历程
- solr 配置中文分词器
- python 3解释器_python004 Python3 解释器
- 浮点数不能全等比较吗php,php的一些易错知识点整理 | 木凡博客
- bind(),live(),delegate(),on()绑定事件方式
- javascript在firefox中对Dom的处理的一个问题
- 重庆北大青鸟【学员心声】:有计划的做事情才能事半功倍
- Alienware-17-R2 Ubuntu killer无线网卡
- linux流量监控分析工具,Linux网络流量监控与分析工具Ntopng
- [从零手写VIO|第五节]——后端优化实践——单目BA求解代码解析
- 公司职员信息管理系统
- python画图入门例子
- 日常工作--定位查看服务器日志笔记
- 海蜘蛛路由学习笔记 (限速篇)
热门文章
- 生活的花环:看雷加对文学的回顾
- python控制流代码怎么用_Python学习笔记控制流的元素
- php 获取文件大小 修改时建,php遍历目录输出文件大小,类型,修改时间.
- python删除第一行_Python删除文件第一行
- oracle中调试存储过程,详解Oracle调试存储过程
- Spark streaming java代码
- day36 Pyhton 网络编程03
- Ubuntu16.04用源安装Nginx+PHP5.6+MySQL5.6
- Angular自学笔记(?)DI提供者
- javaScript第三天(1)