观察者模式学习A
2012-02-11 15:57
183 查看
观察者模式:
被观察者A--》间谍--》观察者。
它就像现在的国家与国家之间的谍情获取一样。
比如:A国家想知道B国家的总统每天做了些什么事,以方便获取此国家的某些秘密,那么A国家则向B国家的总统身边放了一个间谍C,每当B国家的总统做了些什么事(包括每天的吃饭、睡觉、活动)等,则向A国家报告。
。。。。
也许不单单是A国家想知道B国家的总统的事,可能D、E、F国家也想知道,因此它们也模仿A国家,同样向其放他们自己的间谍,以方便获取某些信息等。(呵呵,先卖个关子)
我采用了古代韩非子(代表B国家)与李斯(代表A国家)来作例子
下面我们来定义一些类来实现它。比如:韩非子吃早餐和活动。
首先定义一个接口IHanFeiZi
再定义一个类HanFeiZi来实现它
然后再看看李斯(代表A国家)怎么知道的。
定义一个接口ILiSi
定义一个LiSi类来实现该接口
再定义一个客户端来运行它:
所以都定义好后,再看看客户端是怎么运行的
运行结果:
从结果可以看到韩非子一旦吃早餐,就有间谍来向李斯报告;同样一旦去活动了,再身李斯报告。
这样就实现了观察者与被观察者的关系。
但大家有没有发现,如果还有其他观察者呢?呵呵!在此先不说:则在下一篇分解。
被观察者A--》间谍--》观察者。
它就像现在的国家与国家之间的谍情获取一样。
比如:A国家想知道B国家的总统每天做了些什么事,以方便获取此国家的某些秘密,那么A国家则向B国家的总统身边放了一个间谍C,每当B国家的总统做了些什么事(包括每天的吃饭、睡觉、活动)等,则向A国家报告。
。。。。
也许不单单是A国家想知道B国家的总统的事,可能D、E、F国家也想知道,因此它们也模仿A国家,同样向其放他们自己的间谍,以方便获取某些信息等。(呵呵,先卖个关子)
我采用了古代韩非子(代表B国家)与李斯(代表A国家)来作例子
下面我们来定义一些类来实现它。比如:韩非子吃早餐和活动。
首先定义一个接口IHanFeiZi
/** * */ package com.nantian.designmodel.observer; /** * @author ps * */ public interface IHanFeiZi { /** * 被观察者的吃早餐动作 */ public void haveBreakfast(); /** * 被观察者的活动 */ public void haveFun(); }
再定义一个类HanFeiZi来实现它
/** * */ package com.nantian.designmodel.observer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * @author ps * */ public class HanFeiZi implements IHanFeiZi { protected static final Log log = LogFactory.getLog(HanFeiZi.class); private ILiSi liSi; public ILiSi getLiSi() { return liSi; } public void setLiSi(ILiSi liSi) { this.liSi = liSi; } /* (non-Javadoc) * @see com.nantian.designmodel.observer.IHanFeiZi#haveBreakfast() */ @Override public void haveBreakfast() { log.info("韩非子吃早餐了,赶紧通知李斯"); liSi.update("报告李斯,他吃早餐了!"); log.info("报告完毕!"); } /* (non-Javadoc) * @see com.nantian.designmodel.observer.IHanFeiZi#haveFun() */ @Override public void haveFun() { log.info("韩非子出去活动了,赶紧通知李斯"); liSi.update("报告李斯,他吃早餐了!"); log.info("报告完毕!"); } }
然后再看看李斯(代表A国家)怎么知道的。
定义一个接口ILiSi
/** * */ package com.nantian.designmodel.observer; /** * @author ps * */ public interface ILiSi { /** * 一旦发现被观察者有动情了,就该做点事了。 * @param str */ public void update(String str); }
定义一个LiSi类来实现该接口
/** * */ package com.nantian.designmodel.observer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * @author ps * */ public class LiSi implements ILiSi { protected static final Log log = LogFactory.getLog(LiSi.class); /* (non-Javadoc) * @see com.nantian.designmodel.observer.ILiSi#update(java.lang.String) */ @Override public void update(String str) { log.info("收到!===" + str); log.info("开始要做点事了!"); } }
再定义一个客户端来运行它:
/** * */ package com.nantian.designmodel.observer; /** * @author ps * */ public class ObserverClient { /** * @param args */ public static void main(String[] args) { LiSi lisi = new LiSi(); HanFeiZi hfz = new HanFeiZi(); hfz.setLiSi(lisi); hfz.haveBreakfast(); hfz.haveFun(); } }
所以都定义好后,再看看客户端是怎么运行的
运行结果:
二月 11, 2012 3:57:42 下午 com.nantian.designmodel.observer.HanFeiZi haveBreakfast 信息: 韩非子吃早餐了,赶紧通知李斯 二月 11, 2012 3:57:42 下午 com.nantian.designmodel.observer.LiSi update 信息: 收到!===报告李斯,他吃早餐了! 二月 11, 2012 3:57:42 下午 com.nantian.designmodel.observer.LiSi update 信息: 开始要做点事了! 二月 11, 2012 3:57:42 下午 com.nantian.designmodel.observer.HanFeiZi haveBreakfast 信息: 报告完毕! 二月 11, 2012 3:57:42 下午 com.nantian.designmodel.observer.HanFeiZi haveFun 信息: 韩非子出去活动了,赶紧通知李斯 二月 11, 2012 3:57:42 下午 com.nantian.designmodel.observer.LiSi update 信息: 收到!===报告李斯,他吃早餐了! 二月 11, 2012 3:57:42 下午 com.nantian.designmodel.observer.LiSi update 信息: 开始要做点事了! 二月 11, 2012 3:57:42 下午 com.nantian.designmodel.observer.HanFeiZi haveFun 信息: 报告完毕!
从结果可以看到韩非子一旦吃早餐,就有间谍来向李斯报告;同样一旦去活动了,再身李斯报告。
这样就实现了观察者与被观察者的关系。
但大家有没有发现,如果还有其他观察者呢?呵呵!在此先不说:则在下一篇分解。
相关文章推荐
- 设计模式学习--观察者模式(Observer Pattern)
- 2016.12.27 学习日记-观察者模式补充-委托
- 设计模式学习一 策略模式;观察者模式
- php设计模式学习之观察者模式
- 设计模式学习9 -- 观察者模式(Observer)
- Android设计模式学习日记03--观察者模式
- 学习设计模式--观察者模式(C++)
- 设计模式学习-观察者模式
- 步步为营 .NET 设计模式学习笔记 十二、Observer (观察者模式)
- 学习笔记 ---- 设计模式之观察者模式
- 设计模式学习笔记之观察者模式
- [知了堂学习笔记]设计模式之观察者模式
- .Net学习之基于委托、事件的观察者模式
- Observer:观察者模式学习
- 《Head First 设计模式》学习笔记:策略模式与观察者模式
- 设计模式学习笔记(2):观察者模式(1)
- Java-马士兵设计模式学习笔记-观察者模式-读取properties文件,动态增加观察者
- 学习、探究Java设计模式——观察者模式
- 设计模式C++学习笔记之十六(Observer观察者模式)
- Header First设计模式学习笔记——观察者模式