首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

观察者模式懂得

2012-08-25 
观察者模式理解这么个场景:ATM取款机,你输入密码。如果正确,那么进去取款页面。但是如果错误,则重新输入,当

观察者模式理解

这么个场景:ATM取款机,你输入密码。如果正确,那么进去取款页面。但是如果错误,则重新输入,当输入次数=3的时候,此时,ATM机器吞没你的卡片,同时触发几件事情:1.拍照? 2.通知系统? 3.页面初始化,给别人用。

对于一个ATM取款机,由于只可能一个人进行操作,因此这里将该场景看为一个单线程操作。

根据我对观察模式的理解,就是有观察者、有被观察者,如果被观察者有事件发生,那么将触发观察者相应的事件发生。因此上面的场景完全可以用观察模式进行模拟。

首先对被观察者进行实现:

public class Client {public static void main(String[] args) {//把几个观察者给整出来Observer photo=new Photo();Observer callsystem=new CallSystem();Observer initepage=new InitePage();//然后把观察者加到被观察范围Observable atm=new ATMObservable();atm.addObserver(photo);atm.addObserver(callsystem);atm.addObserver(initepage);//好了,来了个坏蛋或者13,当然还是要给你三次机会嘛,让你瞎试!for (int i = 0; i < 3; i++) {switch(i){case 0:atm.inputPassword("134523");break;case 1:atm.inputPassword("324123");break;case 2:atm.inputPassword("322221");break;default:System.out.println("搞什么东东!");}}}}

?

因为我这边是模拟,只允许输入三次,所以就用上面的方式处理了,代码有点多。哎,凑合着看吧,主要是为了把这模式和场景进行实现嘛。

当然,记得前面看过门面模式,既然不想让人家看你输入的密码啥的,那把main的方法实现封装起来做个接口,把方法露出来就是。呵呵,门面模式其实还是蛮有意思的。

前面也说了,被观察者实现的时候,属于单线程的方式处理。但现在很多场景都是并发进行,属于多线程方式,所以具体问题具体对待。不多说了,就理解到这,还需要认真理解模式更深邃的东东。

热点排行