博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式-观察者模式
阅读量:6005 次
发布时间:2019-06-20

本文共 2778 字,大约阅读时间需要 9 分钟。

观察模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新;

以下的列子含义:当车站要求指定的列车发车,所有在站内的列表均得到发车通知!

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace PatternProject{    public interface ITrain    {        string From        { get; set; }        string To        { get; set; }        DateTime StartingDateTime        { get; set; }        void Start(ITrain train);    }    public interface IStation    {        void AddTrain(ITrain train);        void CancelTrain(ITrain train);        void StartNotify(ITrain train);    }    public class Station : IStation    {        List
_trainList = new List
(); public void AddTrain(ITrain train) { _trainList.Add(train); } public void CancelTrain(ITrain train) { _trainList.Remove(train); } public void StartNotify(ITrain train) { foreach (ITrain t in _trainList) { t.Start(train); } } } public class Train : ITrain { public string From { get; set; } public string To { get; set; } public DateTime StartingDateTime { get; set; } public Train(string from, string to, DateTime startingDateTime) { this.From = from; this.To = to; this.StartingDateTime = startingDateTime; } public bool IsCurrent(ITrain train) { if (train.From == this.From && train.To == this.To && train.StartingDateTime == this.StartingDateTime) { return true; } else { return false; } } public void Start(ITrain train) { Console.WriteLine("{0}开往{1}列车收到通知:",this.From,this.To); if (IsCurrent(train)) { Console.WriteLine("从{0}开往{1}的列车,于{2}开车,敬请注意!", this.From, this.To, this.StartingDateTime); } else { Console.WriteLine("还未到开车时间,敬请稍候!"); } } }}

 

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace PatternProject{    class Program    {        static void Main(string[] args)        {            Station station = new Station();                        station.AddTrain(new Train("北京", "上海", new DateTime(2014, 5, 1)));            station.AddTrain(new Train("北京", "武汉", new DateTime(2014, 3, 1)));            station.AddTrain(new Train("武汉", "上海", new DateTime(2014, 2, 1)));            station.AddTrain(new Train("上海", "南京", new DateTime(2014, 8, 1)));            Train t = new Train("北京", "武汉", new DateTime(2014, 3, 1));            station.StartNotify(t);            Console.ReadKey();        }    }}

  

转载地址:http://ocsmx.baihongyu.com/

你可能感兴趣的文章
Python自动化开发学习5-2-subprocess模块
查看>>
编程实现最小化窗口到桌面右下角图标的代码
查看>>
ELK stack实战之结合rsyslog分析系统日志(auth.log)
查看>>
网络管理工具与IT运维管理平台的差别
查看>>
五一期间安全回顾 木马威胁提升 移动设备数据泄漏受重视
查看>>
VDI序曲二十 桌面虚拟化和RemoteApp集成到SharePoint 2010里
查看>>
压缩介绍、bz2、gz、xz压缩工具
查看>>
StretchRect...果然和文档上说的一样
查看>>
Python成生随机KEY工具
查看>>
将一个数组拆分为几个至少三个元素的递增子序列
查看>>
备忘,解决WIN10下COM注册问题
查看>>
cx_Oracle install
查看>>
jquery ajax从后台获取数据
查看>>
基于Windows平台TSM 6.x版本下,如何删除初始化失败的实例。
查看>>
Start Code School Today!
查看>>
Nginx下载服务生产服务器调优
查看>>
移动互联网,入口生死战
查看>>
nginx面试常问题目
查看>>
制作ubuntu系统u盘镜像,以及安装
查看>>
JAVA多线程深度解析
查看>>