小故事学设计模式之Observer : (三) 老婆帮忙订机票
(IT的事就是过场多,过场多了就容易忘,所以我们不妨看一个记一个,这也是一个办法,顺便还能跟同行们交流一下)
要和老婆一起回老家了, 成都离我们安徽太远, 两个人飞一下过去就要花掉近三千块, 于是我们决定找找有没有更便宜的机票,
"你帮我找找吧, 如果找到的话,跟我说一下",我说道.
"行!"老婆记住了这事.
很快我得到通知, 南航有更便宜的, 580块.
这是一个简单的observer模式.
什么是observer? 其定义如下:
The Observer Patern defines a one-to-many dependency betwen objects so that when one object changes state, all its dependents are notified and updated automatically.
大概结构来描述就如下:

其中Neo(就是我以前在IT混日子的马甲拉)是继承于TicketBuyer这个抽象类的, 为什么这里要加一个抽象类,因为老婆表兄妹多, 都有可能找她订票, 所以要把这些表兄妹的行为抽象到一个公共的抽象类上.
using System;
using System.Collections.Generic; public abstract class TicketBuyer
{
public int TicketPrice;
public string Airline;
} public class Neo: TicketBuyer
{
private int _ticketPrice;
private string _airline; public int TicketPrice
{
get {return _ticketPrice;}
set {_ticketPrice = value;}
} public string Airline
{
get{return _airline;}
set{_airline = value;}
}
}
public class FeiFei
{
private string _airline;
private int _ticketPrice; IList<TicketBuyer> _ticketBuyers; public FeiFei()
{
_ticketBuyers = new List<TicketBuyer>();
} public void AddTicketBuyer(TicketBuyer t)
{
_ticketBuyers.Add(t);
} public void DeleteTicketBuyer(TicketBuyer t)
{
_ticketBuyers.Remove(t);
} public void NotifyTicketInformation()
{
SearchTicket();
foreach(TicketBuyer t in _ticketBuyers)
{
t.Airline = _airline;
t.TicketPrice = _ticketPrice;
}
} private void SearchTicket()
{
_airline = "China Southern";
_ticketPrice = 580;
}
}
运行代码看一下结果:
public class Test
{
public static void Main()
{
TicketBuyer n = new Neo();
FeiFei f = new FeiFei();
f.AddTicketBuyer(n);
f.NotifyTicketInformation();
Console.WriteLine("Airline:" + n.Airline + ", price:" + n.TicketPrice);
Console.Read();
}
}

好了,以上是个人对Observer模式的理解,如有不正确的地方,希望同行能帮我纠正。
谢谢大家!
小故事学设计模式之Observer : (三) 老婆帮忙订机票的更多相关文章
- 小故事学设计模式之Decorate: (二)老婆的新衣服
老婆有一件蓝色的裙子和一件粉色的裙子, 不管怎么穿,她还是原来的老婆. 但是在软件里就不一定了, 如果把老婆比作一个class的话, 有一种做法是会因为增加了两个新的Property而继承出两个子类: ...
- 小故事学设计模式之Command : (一) 在永和豆浆店
IT的事就是过场多,过场多了就容易忘,所以我们不妨看一个记一个,这也是一个办法,顺便跟同行们学习交流一下)前几天出去拍照,饿到腿软, 回城附近有一家永和豆浆店, 我们决定去那边解决午餐.豆浆店里面还不 ...
- 小故事理解TCP/IP连接时的三次握手
在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接,示意图如下: 下面通过一个小故事简单理解一下这三次握手的具体含义: 一天,快递员小客(客户端)准备去小服(服务器)家去送快递(准备与服务 ...
- 生活沉思录 via 哲理小故事
本文转载:http://www.cnblogs.com/willick/p/3174803.html 1.小托蒂的悲剧 意大利小男孩托蒂,有一只十分奇怪的眼睛,因为从生理上看,这是一只完全正常的眼睛, ...
- 杂谈---小故事小道理,面试中的小技巧(NO.2)
本篇是接着上一篇面试随笔的,上一次有猿友反应写的有些“扯淡”,LZ思来想去最大的原因可能是由于上一章写的全是一些大忌,既然是大忌,那么在现实当中发生的概率还是相对较小的,大部分人还是很少在面试中犯如此 ...
- 从壹开始 [ Design Pattern ] 之三 ║ 工厂模式 与 小故事
编者按: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使得一个类的实例化延迟到子类. 工厂模式,是迄今为止,使用最多,最广泛的设计模式之一,它的身影几乎出现在每一个框架和个人代码之中 ...
- UESTC_小panpan学图论 2015 UESTC Training for Graph Theory<Problem J>
J - 小panpan学图论 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) S ...
- .net基础学java系列(三)徘徊反思
.net基础学java系列(三)徘徊反思 上一篇文章:.net基础学java系列(二)IDE 之 插件 这两天晚上看完了IDEA的教学视频:https://edu.51cto.com/course/1 ...
- 从零开始单排学设计模式「装饰模式」黑铁 I
阅读本文大概需要 3.6 分钟. 本篇是设计模式系列的第四篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统. 所以现在打算重写,加上距离现在也有一段时间了 ...
随机推荐
- phpstorm 2017 关掉变量提示 parameter name hints
配置面板中搜索 hints 路径 Editor > General > Appearance > Show parameter name hits 去掉前面的勾就行了
- js简介 基本操作 以及循环语句 内置对象 函数044
js 全称 javascript 从交互的角度 描述行为 一 .js注释方法: //单行注释 声明变量 var 二 .声明多个变量 : var a = '2' ,b = 4, c = tru ...
- PHP 网页调用本地exe程序实例
一.需求:在做网站的时候,有些网站网页面需要调用本地的exe程序. 二.方法:利用注册URL Protocol的方式. 代码如下: 1.视图文件里面的代码: <a href="fyex ...
- Prestashop使用心得
如果对Prestashop好奇的小伙伴快点进来看看吧,我开始接触了Prestashop这个开源的系统,这个一个非常棒的电商系统.因为我对这个Prestashop系统完全没有了解,但是上网却看不到太多的 ...
- nyoj 568——RMQ with Shifts——————【线段树单点更新、区间求最值】
RMQ with Shifts 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 In the traditional RMQ (Range Minimum Q ...
- 记自己的hexo个人博客
https://othercoding.github.io/
- javascript数组与字符串之间转换
一.数组转字符串(将数组元素用某个字符连接成字符串) var a, b;a = new Array(0,1,2,3,4);b = a.join("-"); 二.字符串转数组(将字符 ...
- continue break return
ontinue: 可以让程序跳过,continue关键字之后的语句,回到while循环的第一行命令 break: 让程序完全跳出循环,结束while循环的执行 return: 从查询或过程中无条件退出 ...
- opencv2.4.10+VS2012配置问题
opencv2.4.10+VS2012配置 作为opencv的初学者,第一个难题想必都一样,如何配置opencv+VS的环境呢?在网上的教程,铺天盖地,但我仍然是尝试了十几次才找到属于自己的那套配置方 ...
- 2018-12-20 第二章Java 预习作业
一.什么是变量?如何使用变量? 答:变量是在程序运行中其值可以改变的量,它是Java程序的一个基本存储单元. 变量的语法格式如下: [访问修饰符]变量类型 变量名[=初始值]: 二.java中基本数据 ...