小故事学设计模式之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模式的理解,如有不正确的地方,希望同行能帮我纠正。

谢谢大家!

时间: 2024-10-29 10:45:52

小故事学设计模式之Observer : (三) 老婆帮忙订机票的相关文章

小故事学设计模式之Decorate: (二)老婆的新衣服

老婆有一件蓝色的裙子和一件粉色的裙子, 不管怎么穿,她还是原来的老婆. 但是在软件里就不一定了, 如果把老婆比作一个class的话, 有一种做法是会因为增加了两个新的Property而继承出两个子类: "穿裙子的老婆, 穿粉色上衣的老婆". 你这样弄出两个子类也没什么不对, 问题是当MM的有上百件服装的时候,就会产生上百个子类,这个不好,将来万一父类一变化,下面上百个子类都要一个个地去修改,太乱了. 有一个更合理的方式来解决这个"老婆的装饰问题".我们的要求是:  

小故事学设计模式之Command : (一) 在永和豆浆店

IT的事就是过场多,过场多了就容易忘,所以我们不妨看一个记一个,这也是一个办法,顺便跟同行们学习交流一下)前几天出去拍照,饿到腿软, 回城附近有一家永和豆浆店, 我们决定去那边解决午餐.豆浆店里面还不错, 整得挺时尚的, (跟我几年前在杭州去的那家区别蛮大).我喜欢餐馆里明亮的色调和鲜翠欲滴的菜品照片.服务员也不错, 挺和气的.邻桌饭菜的香气弥漫开来,像卡通片一样飘过来, 罩着点菜的我们俩和面前可爱的服务员(三个大头娃娃!).服务员熟练地询问,打字, 然后把小票传给后面厨房的小窗里. 一回头又面

小故事理解TCP/IP连接时的三次握手

在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接,示意图如下: 下面通过一个小故事简单理解一下这三次握手的具体含义: 一天,小客(客户端)准备去小服(服务器)家去送礼(准备与服务器进行连接),当走到小服家门口发现,小服家大门紧锁, 然后便高喊,"小服,你把门开开(尝试与服务器简历连接),我是小客(发送同步序列编号Synchronize Sequence Numbers ,确认身份信息)",此时,小客进入等待小服回应的状态(客户端进入SYN_SEND),(由此实现双方第一次

70个晨会激励哲理小故事

  1.面对生命的态度  有位太太请了个油漆匠到家里粉刷墙壁.  油漆匠一走进门,看到她的丈夫双目失明,顿时流露出怜悯的眼光.可是男主人一向开朗乐观,所以油漆匠在那里工作了几天,他们谈得很投机:油漆匠也从未提起男主人的缺憾.  工作完毕,油漆匠取出帐单,那位太太发现比谈妥的价钱打了一个很大的折扣.  她问油漆匠:“怎么少算这么多呢?”  油漆匠回答说:“我跟你先生在一起觉得很快乐,他对人生的态度,使我觉得自己的境况还不算最坏.所以减去的那一部分,算是我对他表示一点谢意,因为他使我不会把工作看的太

【一起学设计模式】中介者模式+观察者模式+备忘录模式实战:(二)提交个订单我到底经历了什么鬼?

前言 再多的话就不说了,这个是接着上一讲: [一起学设计模式]状态模式+装饰器模式+简单工厂模式实战:(一)提交个订单我到底经历了什么鬼? 一起的,一些多余的赘述请先看这个篇文章. 业务场景 一图流,还是上一篇文章中一样的图,接下来我们就梳理下总结模式.观察者模式.备忘录模式的应用: 订单中心: 1.订单中心创建订单 2.订单状态流转(状态模式) 3.记录操作日志(装饰器模式+简单工厂模式) 4.订单中心通知 库存中心更新库存 调度中心: 1.库存中心更新本地库存(使用命令模式+模板方法模式+工

圈子内小故事

咱也学学马未都先生,没有真相,只是残存一个道理. 恩,这句话还真是有点道理,那下面这些小故事就是告诉我们,在程序的世界里,行胜于言. ------------------------------------------- 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:Eugene Hsueh链接:http://www.zhihu.com/question/20355709/answer/14873547来源:知乎 是的,马克·扎克伯格独自完成了 Facebook 第一

一则小故事看产品数据分析

0.一个小故事:还有一元钱哪儿去了? 网上有个故事很有趣,说3个人去投宿,一晚30元.三个人每人掏了10元凑够30元交给了老板. 後来老板说今天优惠只要25元就够了,拿出5元命令服务生退还给他们, 服务生偷偷藏起了2元, 然后,把剩下的3元钱分给了那三个人,每人分到1元.这样,一开始每人掏了10元,现在又退回1元,也就是10-1=9,每人只花了9元钱, 3个人每人9元,3 X 9 = 27 元 + 服务生藏起的2元=29元,还有一元钱去了哪里? 猛地一看,合情合理,并且陷入思维陷阱.可仔细一琢磨

关于信息化的几个小故事,摘自麦枫网

企业的信息化的实行是增强企业反响才干.进步企业效率.改进企业管理方式的一项工作,选择实施一项性能良好的信息化软件是作为信息化的主管的一项重要工作,下面我们就几个小故事来看一看: 一.指导看电脑 这是发作在几年前的一个真实的故事:某单位要添置一台电脑,向指导审批.指导以为往常是信息化时期,电脑对单位很重要的,所以很支持,就批准购进了一台电脑,由单位的小王担任日常的运用.一天,指导忽然想看看电脑到底是怎样运用的,就到电脑前面去观摩小王的操作.谁知道刚一看桌面指导居然发现一个严重的问题:"小王啊,你怎

UESTC_小panpan学图论 2015 UESTC Training for Graph Theory&lt;Problem J&gt;

J - 小panpan学图论 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 小panpan不会图论,所以图论专题他非常刻苦地学习图论. 今天他认真地学习了萌神的ppt,学习了一下Floyd算法,手持两把锟斤拷的他, 口中疾呼烫烫烫,马上找了到OJ上找了道FLoyd的题: n个点,m边的无向连通图,无重边,无自环,每条边的长度都是1,求任意两点之间的