最近一直在IBM开发者上找点资料学西设计模式的资料,前段时间也看了些关于设计模式的视频,但总感觉云里雾里(只怪功力太浅),今天下午又重新看了下设计模式中的Observer模式,网上的和开发者上讲这个模式举的例子让我看的是似懂非懂...
于是自己想了一个通俗的例子,讲了一个故事。如下:
一天,小明突然想去杭州玩玩,因为年纪小,去之前必须先告诉爸爸妈妈,问问他们的意见。
于是,这个观察者模型就此构建起来了,小明爸妈是小明的监护人(哈哈,这样爸妈就是观察者,小明就是被观看者)。
首先 ,构建人物模型:
//为了节省版面,这里省去了get,set方法,读者可以自己加进去
public class Son extends Observable{
private String destination;
private String motherMessage;
private String fatherMessage;
protected void travel(){
//5.他把他的想法告诉给他爸妈
this.setChanged();
this.notifyObservers(this);
}
}
这是Son的对象
public class Father implements Observer{
@Override
public void update(Observable o, Object arg) {
Son mySon = (Son)arg;
//6.1 他的爸爸知道了后
if("杭州".equals(mySon.getDestination())){
System.out.println("去杭州干嘛啊?赶快回来");
mySon.setFatherMessage("赶快回家");
}
}
}
这是Father对象
public class Mother implements Observer{
@Override
public void update(Observable o, Object arg) {
//6.2他的老妈知道后
Son mySon = (Son)arg;
mySon.setMotherMessage("不管你去哪里,老妈都支持你 去吧,孩子");
System.out.println("不管你去哪里,老妈都支持你 去吧,孩子");
}
}
这是Mother对象
那么 现在来测试吧
public class Test1 {
public static void main(String[] args) {
//1.从前有个小孩
Son son = new Son();
//2.他的爸妈是他的监护人
Father f = new Father();
Mother m = new Mother();
son.addObserver(m);
son.addObserver(f);
//3.有一天他想去杭州玩了
son.setDestination("杭州");
//4.所以他把准备travel的想法告诉了他的爸妈
//其实你可以把这个travel()放到setDestination()中,
//这样可以自动触发通知
son.travel();
//7.老爸老妈的答复
//这个只是为了大家调试的,你可以取消注释
//System.out.println(son.getFatherMessage());
//System.out.println(son.getMotherMessage());
}
}
程序输出是:
去杭州干嘛啊?赶快回来
不管你去哪里,老妈都支持你 去吧,孩子
//有兴趣的同学可以去看看为什么先输出的是老爸的建议!明明是老妈先监听的啊,
//有同学可能会说,存储观察者用的是栈结构啊,哈哈,或许你看看Observable源码或许就知道了,这里就不赘述了
哈哈 就此一个观察者模式的完整流程出来了。。。其实你按照我标记的1,2,3,4,5,6,7一步步走下去就是整个流程了····
原来观察者模式也就这么点东西 其实也没那么玄乎,哎 主要是网上的例子太过生涩,这里就贴出我的例子和大家分享下,
希望对大家有用,我是小菜,写错的地方望谅解