Observer觀察者設計模式

Observer設計模式主要包括以下兩種對象:

(1)被觀察對象:Subject,它往往包含其他對象感興趣的東西,上面例子中熱水器中就是Subject(被監視對象);

(2)觀察對象:Observer,它觀察著Subject,當Subject中的某件事發生后,會告知Observer,Obersver會采取相應的行動。上面例子中顯示器和報警器就是觀察對象,當油箱中溫度大于95°時,報警器和顯示器就會做出相應的警報;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ObserverApp
{class Program{static void Main(string[] args){Oil o = new Oil();o.BoiledEvent += new Alarm().MakeAlarm;//先往Oil對象中注冊事件o.BoiledEvent += new Display().ShowMsg;//先往Oil對象中注冊事件o.BoilWater();//執行主要方法,等到條件合適在觸發上面注冊的事件
        }}/// <summary>/// Subject被觀察對象   ---Oil熱水器/// </summary>internal class Oil{/// <summary>/// 牌子/// </summary>public string brand = "Nick";/// <summary>/// 價格/// </summary>public int price = 1000;public delegate void BoiledHandler(object obj, EventArgs args);public event BoiledHandler BoiledEvent;/// <summary>/// 將觀察者感興趣的信息通過實例傳遞過去/// </summary>public class BoilEventArgs : EventArgs {public int Temperature { get; set; }public BoilEventArgs(int temperature) {this.Temperature = temperature;}}public void BoilWater() {for (int i = 0; i <= 100; i++) {if (i >= 95) {BoilEventArgs args = new BoilEventArgs(i);BoiledEvent(this, args);//當溫度達到95度及以上的時候,觸發所有訂閱該事件的觀察者的方法
                }}}}/// <summary>/// Observer觀察對象   ---警報器/// </summary>internal class Alarm {public void MakeAlarm(object sender,EventArgs args) {Oil o = (Oil)sender;ObserverApp.Oil.BoilEventArgs a = (ObserverApp.Oil.BoilEventArgs)args;Console.WriteLine("Alarm:嘀嘀嘀,水已經 {0} 度了,當前熱水器的牌子是{1},價格是{2}",a.Temperature, o.brand, o.price);}}/// <summary>/// Observer觀察對象   ---顯示器/// </summary>internal class Display{public void ShowMsg(object sender, EventArgs args){Oil o = (Oil)sender;ObserverApp.Oil.BoilEventArgs a = (ObserverApp.Oil.BoilEventArgs)args;Console.WriteLine("Display:水已燒開,當前溫度:{0}度,當前熱水器的牌子是{1},價格是{2}", a.Temperature, o.brand, o.price);Console.ReadKey();}}
}

?

轉載于:https://www.cnblogs.com/GreenLeaves/p/6962797.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372000.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372000.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372000.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最小生成樹 prime zoj1586

題意&#xff1a;在n個星球&#xff0c;每2個星球之間的聯通需要依靠一個網絡適配器&#xff0c;每個星球喜歡的網絡適配器的價錢不同&#xff0c;先給你一個n&#xff0c;然后n個數&#xff0c;代表第i個星球喜愛的網絡適配器的價錢&#xff0c;然后給出一個矩陣M[i][j]代表第…

android 書架菜單,Android入門3--做一個書架

修改名稱創建項目的時候&#xff0c;APP的名字取為英文或者拼音&#xff0c;是為了簡便&#xff0c;但是顯示在界面上&#xff0c;我們當然希望它是中文的。taoguanstring>我們要做的很簡單&#xff0c;就是在string.xml中&#xff0c;將app_name的內容修改為我們希望的名字…

第一節:整體介紹

Python版本3.5.2&#xff0c;Django版本1.10 創建一個Django工程&#xff0c;并且生成一個名字為mainsite的app django-admin.py startproject myblog python3 manage.py startapp mainsite 文件結構如下&#xff1a; x-powerxpower-CW65S:~/chen/myblog$ tree ./ ./ ├── ma…

Spring @Configuration和FactoryBean

考慮使用FactoryBean通過Spring配置文件定義緩存&#xff1a; <cache:annotation-driven /><context:component-scan base-packageorg.bk.samples.cachexml></context:component-scan><bean idcacheManager classorg.springframework.cache.support.Simpl…

cookie解決 未登錄加入購物車 第一次訪問彈出新手引導頁面

瀏覽器攜帶cookie到服務器, 點擊加入購物車-->后臺檢查-->是否登錄(有沒有sessionid) 沒有登錄--->secookie()返回給瀏覽器,把傳遞過來的商品id, 屬性(多個屬性逗號拼接),數量存起來,(序列號成字符串_不同屬性用下劃線拼接) 轉載于:https://www.cnblogs.com/bj-tony/p…

REST + Spring Security會話問題

REST &#xff0c; 會話 ..等待。 REST應用程序中沒有會話&#xff0c;對嗎&#xff1f; 好吧&#xff0c;那是真的。 如果我們可以避免會議&#xff0c;我們應該這樣做。 REST是無狀態的 。 有關無狀態性的主要問題是身份驗證。 在通常的Web應用程序中&#xff0c;我們習慣于在…

程序猿果真有前端后端client嗎

前端 后端 client DBA OP 程序猿有分這么細的嗎?入行時候有區別. 殊途同歸 吾道一以貫之, 假設作為程序猿不能領悟一貫, 則永遠不清楚.轉載于:https://www.cnblogs.com/blfbuaa/p/6970139.html

HarmonyOS硬件創新合作伙伴,【HarmonyOS】HarmonyOS智能硬件開發學習指南 - HDC2020

2020年9月10日&#xff0c;華為HarmonyOS 2.0版本正式官宣&#xff01;這一次&#xff0c;借助 HarmonyOS 全場景分布式系統和設備生態&#xff0c;將定義全新的硬件、交互和服務體驗&#xff0c;打開煥然一新的全場景世界&#xff0c;不愧是HarmonyOS&#xff01; 那HarmonyOS…

處于RUNNABLE狀態的Java線程未真正運行

最近&#xff0c;我在Java應用程序服務器安裝上進行了分析/調整&#xff0c;以識別瓶頸并修復它們。 在此過程中&#xff08;調整&#xff09;&#xff0c;最常見的操作是在系統加載時檢索許多線程轉儲。 請記住&#xff0c;重載&#xff08;在某些情況下&#xff09;可能會產生…

2.3 關系完整性

關系模型的完整性規則是對關系的某種約束條件。 也就是說關系的值隨著時間變化時應該滿足一些約束條件。 &#xff08;這些約束條件實際上是現實世界的要求。任何關系在任何時刻都要滿足這些語義約束&#xff09; 關系模型中有三類完整性約束&#xff1a; 實體完整性 &#xff…

Android 顏色大全color.xml

使用方法&#xff1a; 將color.xml文件拷到res/values目錄下后我們只需要R.xml文件名稱.name名稱就可以調用了(例如:R.color.red) <?xml version"1.0" encoding"utf-8"?><resources> <color name"white">#FFFFFF</color&…

鴻蒙系統華為論壇,2020中國汽車論壇上 華為三大鴻蒙車載OS系統

在今天的2020中國汽車論壇上&#xff0c;華為公布了三大鴻蒙車載OS系統&#xff0c;同時還宣布已經有大量合作伙伴基于鴻蒙OS進行開發。根據智能汽車解決方案BU總裁王軍所說&#xff0c;這三大鴻蒙OS分別是——鴻蒙座艙操作系統HOS、智能駕駛操作系統AOS和智能車控操作系統VOS&…

只讀ViewObject和聲明性SQL模式

介紹 聲明式SQL模式被認為是基于實體的視圖對象的最有價值的優點之一。 在此模式下&#xff0c;根據UI中顯示的屬性在運行時生成VO的SQL。 例如&#xff0c;如果某個頁面包含一個只有兩列EmployeeId和FirstName的表&#xff0c;則查詢將生成為“從Employees中選擇Employee_ID&a…

android 360加固 例子,[原創]利用VirtualApp實現360加固的soHook簡單例子

簡單demo&#xff0c;為拋磚引玉吧&#xff01;360的加固我們先寫一個最簡單的so&#xff0c;帶導出函數。這已經足夠簡單了&#xff0c;界面上打印這個值。運行起來就這樣。簡單的簡直過分。好了&#xff0c;現在我們讓360加固一下。拿下來自己簽名下&#xff0c;安裝好&#…

scrapy架構解析

轉載于:https://www.cnblogs.com/tianboblog/p/6986695.html

華為怎么升級Android11,華為EMUI 11/安卓11升級名單曝光 快來看看你的手機是否支持...

華為EMUI 11/安卓11升級名單曝光 快來看看你的手機是否支持2020年02月10日 16:29作者&#xff1a;NJNR205文章出處&#xff1a;泡泡網原創分享2月10日消息&#xff0c;據外媒報道&#xff0c;華為將于今年3月份的華為開發者大會(HDC)上正式宣布新一代EMUI 11。眾所周知&#xf…

Scala安裝及開發環境搭建

最近想學習下scala&#xff0c;為后面轉大數據做一些沉淀。 1. 首先保證jdk已經成功安裝 2. 去官網下載scala安裝程序 http://www.scala-lang.org/download/all.html 會列出不同的版本. 3. 安裝scala 安裝路徑記得不要有空格否則可能會出現以下這種狀況&#xff0c;還有&am…

簡單利用HTTP中的PUT協議拿下SHELL

第一次用方法拿shell,之前遇到的都是沒有寫入權限的。 站太辣雞&#xff0c;純粹練手&#xff0c;就不打碼了。 此次實戰會用到的HTTP請求方法&#xff1a; OPTIONS&#xff0c;PUT&#xff0c;MOVE/COPPY * 戰前準備 0x01 什么是OPTIONS方法&#xff1f; 此方法用于請求獲得由…

JSF – PrimeFaces和休眠集成項目

本文介紹了如何使用JSF&#xff0c;PrimeFaces和Hibernate開發項目。 下面是一個示例應用程序&#xff1a; 二手技術&#xff1a; JDK 1.6.0_21 Maven的3.0.2 JSF 2.0.3 PrimeFaces 2.2.1 休眠3.6.7 MySQL Java連接器5.1.17 MySQL 5.5.8 Apache Tomcat 7.0 第1步&#xff1…

android q升級名單,華為升級 Android Q 機型名單敲定 陣容龐大

中關村在線消息&#xff1a;在 5 月份的谷歌 I/O 大會上&#xff0c;谷歌公布了一系列支持下一代安卓系統 Android Q 的機型。除了谷歌自家的 pixel 手機之外&#xff0c;還包括 9 款國產手機&#xff0c;其中華為 Mate20 Pro 成為華為首款支持原生安卓的機型。這也讓華為手機的…