案例要求:用Observer方式写一个模拟手机耗电的程序,三个类的模块分别是手机(phone),电量显示器(displayer)和报警器(speaker),完成委托与事件声明、observer代理方法、代理时间注册等过程。

实现效果:当手机电量大于20%时,输出当前手机电量为__%; 当手机电量小于等于20%时,输出手机快没电了,就剩__%。

代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;namespace ConsoleApp1
{class Program{public class Phone{private int dianliang;public delegate void Haodian(int param);public event Haodian Speacker;public event Haodian Displayer;public void Dianliang(){for (int i = 100; i >= 0; i--){dianliang = i;Thread.Sleep(200);if (Displayer != null){Displayer(dianliang);}if (dianliang <= 20){if (Speacker != null){Speacker(dianliang);}}}}}public class Speack{public void MakeAlert(int param){Console.WriteLine("手机快没电了,就剩 {0} %:", param);}}public class Display{public static void ShowMsg(int param){if (param > 20)Console.WriteLine("当前手机电量是:{0}%。", param);}static void Main(string[] args){Phone phone = new Phone();Speack speack = new Speack();phone.Speacker += speack.MakeAlert;phone.Displayer += Display.ShowMsg;phone.Dianliang();Console.ReadKey();}}}
}

运行结果如下:

C# 委托、事件与Observer模型小案例相关推荐

  1. Vue里使用three.js实现3D模型小案例

    Vue里使用three.js实现3D模型小案例 1.下载three.js包 npm install three --save 或者 yarn add three --save 2.组件代码 <t ...

  2. 设计模式---观察者模式(Observer)和委托事件模型(DEM)

    1 引言 观察者模式,又名发布订阅模式,是一个一对多的关系,当被观察者发生某种变化,对应其观察者做出相应的改变.比如说,某学校研究生实验室有2个学生,2个学生某个上午在实验室,A在玩游戏,B在看电影, ...

  3. Observer设计模式中-委托事件-应用在消息在窗体上显示

    Observer设计模式:监视者模式.在类中的方法中处理的结果或者消息通过事件委托 的方式发送给主窗体. 因为在其它类中直接访问主窗体类,显示内容是不能直接调用控件赋值的,当然也有别的类似查阅控件名, ...

  4. 机器学习之sklearn-KNN近邻算法分类小案例(乳腺癌预测最优模型)

    (案例):用sklearn包实现knn分类小案例,通过交叉验证网格搜索获取最优参数模型,进行参数评估. 导包: from sklearn.datasets import load_breast_can ...

  5. Vue制作todoList事件备忘录经典小案例

    前言 今天是10月1日国庆节,行走在大街小巷,处处洋溢着热烈喜庆的节日氛围,在这一天祝愿祖国繁荣昌盛,越来越强大.因国庆放假(本来周六这天有课),今天无聊看了看后台私信,看到了很对私我类似的消息: 很 ...

  6. Javascript小案例(一):仿淘宝搜索框用户输入事件的实现

    淘宝是我们经常用的一个网上购物平台,打开淘宝网首页,找到淘宝首页的搜索框,如下如所示: (截图日期:2017年6月18日) 大家可以看到,当页面一打开,搜索框中就可以看到灰色字体"少女高跟鞋 ...

  7. C#委托事件小实例 闹钟

    #region 委托与事件 闹钟小实例 /*  * 包含:  * Prpgram类  * AlarmClock 实体类  * BellEventArgs 闹铃事件参数类  *   * 作者:大元帅   ...

  8. php7 viewmodel,【初念科技】| php框架实例: Laravel之Model Observer模型

    原标题:[初念科技]| php框架实例: Laravel之Model Observer模型 本文主要学习下Laravel的Model Observer模型观察者,小编把自己的一点点经验分享出来希望对别 ...

  9. 刘铁锰老师C#语言入门详解(委托事件等部分有详细代码和注释)

    目录 1.初识类 1.1 类与对象的关系 1.2 类的三大成员 1.3 静态成员与实例成员 1.4 类修饰符 2.构成C#语言的基本元素 2.1 六个基本元素 2.2 算法简介 3. 详解类型.变量与 ...

最新文章

  1. 计算机硬件常见问题及修复,pc机输入输出设备的常见故障现象及故障修复方法...
  2. Community Server专题一:概述Community Server
  3. 2019 年百度之星·程序设计大赛 - 初赛一 C. HDU 6670 Mindis 离散化+dijkstra
  4. javascript indexOf函数
  5. mongoose 批量修改字段_WordPress图片路径批量替换方法
  6. 信息学奥赛一本通C++语言——1038:苹果和虫子
  7. django-debug-toolbar 工具
  8. CMakeFiles/species.inc.dir/build.make:57: recipe for target 'CMakeFiles/species.inc' failed
  9. 使用cmake和vs2019进行编译libtorch过程
  10. memcache的安装和使用
  11. 软件工程导论课堂作业
  12. 数值分析——Hermite插值
  13. 计算机专业保研英语自我介绍,计算机保研面试英文自我介绍.doc
  14. 计算机win10+上锁,win10系统给电脑屏幕上锁的操作方法
  15. oracle统计每日归档大小,归档大小日志计算
  16. pycharm验证码
  17. 如何将ip修改成域名
  18. 判断一个多边形是否是凸多边形
  19. python实现多进程工资计算器
  20. Asp.Net支付宝沙箱支付(也可用手机扫描支付)详细教程

热门文章

  1. Java——关于num++和++num
  2. godspeed机器人_来自深渊第二季剧情
  3. Android手机屏幕坐标定义
  4. 【描述性指标】节点中心性指标
  5. 学习日志 Day 5
  6. matlab2019使用仿真,光学仿真matlab中的handles怎么用 终于明白了
  7. npm被玩坏了:修复nodejs(‘npm‘ 不是内部或外部命令)
  8. 数学分析 导数与微分(第5章)
  9. 大型企业采购云管理平台的诉求分析-行云管家
  10. GD32F4xx系列CAN通信收发配置