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

  1. 连接linux系统软件,Windows系统上有哪些不错的终端软件可以远程连接Linux?

    PuTTY文章介绍:https://www.toutiao.com/i6631146607595241991/ PuTTY 是一款集成虚拟终端.系统控制台和网络文件传输为一体的自由及开放源代码的程序. ...

  2. 实践GoF的23种设计模式:SOLID原则(上)

    本文分享自华为云社区<实践GoF的23种设计模式:SOLID原则(上)>,作者:元闰子. 前言 从1995年GoF提出23种设计模式到现在,25年过去了,设计模式依旧是软件领域的热门话题. ...

  3. 终端软件升级功能开发_5个很棒的终端技巧可帮助您升级为开发人员

    终端软件升级功能开发 There are plenty of beginner tutorials around that help you learn command line basics, su ...

  4. 终端软件_DMSTerminal现场管控终端软件正式发布

    目前军工企业的信息化建设及管理大多停留在企业内部的管理层,各种任务信息.作业流程等无法直接下达到真正的一线现场层,导致工作在一线的大量技术人员仍然使用传统的纸质工单.纸质记录.口头交流等工作模式进行现 ...

  5. IAP:物联网终端软件升级技术

    本文分享自华为云社区<物联网终端软件升级技术---IAP(因芯片类型较多,本文仅针对STM32的Cortex-M系列)>,原文作者:o0龙龙0o . 现在升级已经成为IoT领域边缘升级的基 ...

  6. 鸿蒙生态箐英班,华为联合西北工业大学开设 “鸿蒙生态菁英班”: 50 人左右,锁定终端软件领域...

    7月5日消息 西北工业大学官方近期宣布,为深入推进校企联合培养,激发同学们在终端软件领域的技术热忱,华为联合西北工业大学开设 "鸿蒙生态菁英班",旨在培养具有终端专业知识,热爱终端 ...

  7. 设计模式:可复用面向对象软件的基础

    文章目录 设计模式 设计模式有4个基本要素 23个设计模式 设计模式分类 目的准则 范围准则 导致重新设计的一般原因,以及解决这些问题的设计模式举例 设计模式所支持的设计的可变方面 设计模式背后的6大 ...

  8. 基于C#的超市收银终端软件--小孩玩具

    基于C#的超市收银终端软件–小孩玩具 需求 小孩玩过家家,希望开一个超市,收银管理部分希望是自动化的. • 所有商品都贴上条形码. • 用条形码扫描枪扫描商品,软件能知道条形码对应的商品名称和价格. ...

  9. 【原创】终结选择困难,Xshell、MobaXterm、PuTTY、SecureCRT 多款 SSH 终端软件该怎么选

    文章目录 软件选取原则 对比表 各软件优势 曝光的安全事件 总结 其他同类软件 软件选取原则 windows 下可用于 ssh 连接的终端软件有很多,本人会根据以下几个原则来进行对比选择: 简单好用. ...

最新文章

  1. JQuery中全局变量和局部变量的理解
  2. A站被黑,你应该做些什么?
  3. Bootstrap下拉菜单组件
  4. 阿里达摩院科学家,3年造出小蛮驴!量产物流机器人,完全自动驾驶,4度电跑100公里...
  5. 青龙羊毛——某世界扶持及新脚本
  6. 怎么判断一个字符串的最长回文子串是否在头尾_LeetCode5:最长回文子串
  7. [转:有种感觉叫佩服]一个程序员的奋斗历程
  8. solr 配置中文分词器
  9. python 3解释器_python004 Python3 解释器
  10. 浮点数不能全等比较吗php,php的一些易错知识点整理 | 木凡博客
  11. bind(),live(),delegate(),on()绑定事件方式
  12. javascript在firefox中对Dom的处理的一个问题
  13. 重庆北大青鸟【学员心声】:有计划的做事情才能事半功倍
  14. Alienware-17-R2 Ubuntu killer无线网卡
  15. linux流量监控分析工具,Linux网络流量监控与分析工具Ntopng
  16. [从零手写VIO|第五节]——后端优化实践——单目BA求解代码解析
  17. 公司职员信息管理系统
  18. python画图入门例子
  19. 日常工作--定位查看服务器日志笔记
  20. 海蜘蛛路由学习笔记 (限速篇)

热门文章

  1. 生活的花环:看雷加对文学的回顾
  2. python控制流代码怎么用_Python学习笔记控制流的元素
  3. php 获取文件大小 修改时建,php遍历目录输出文件大小,类型,修改时间.
  4. python删除第一行_Python删除文件第一行
  5. oracle中调试存储过程,详解Oracle调试存储过程
  6. Spark streaming java代码
  7. day36 Pyhton 网络编程03
  8. Ubuntu16.04用源安装Nginx+PHP5.6+MySQL5.6
  9. Angular自学笔记(?)DI提供者
  10. javaScript第三天(1)