观察者模式

来源:互联网 发布:帝国时代2mac 编辑:程序博客网 时间:2024/04/28 06:01

观察者模式
曾经看过观察者模式的UML图,不知道大家觉得怎么样,反正我是看到都烦,一点不理解,直到在我实习的时候碰到一个喜欢的女孩子,然后突然就理解了,虽然最后还是没成功(压根没讲过话),但是这场单恋让我距离计算机科学又近了一步还是有很大的价值的,如果将来我成功了,她也算的上我成功背后的女人,当然是之一了。废话不多说,我们来看下我当时的经历。
开始我看到一个做我斜对角的女孩,挺漂亮的,然后我就想去了解,但是你也知道呀,我们工作还是很忙的呀,不能实时的观察妹子的。所以我就设计了一种方案,方案的代码如下:

// 妹纸的实现类public class MeiZi {    private HanZi hanZi = new HanZi();    /** 上班 */    public void shangban() {        System.out.println("开始上班了...");        hanZi.update("上班");    };    /** 下班 */    public void xiaban() {        System.out.println("开始下班了...");        hanZi.update("下班");    }    /** 吃饭 */    public void chifan() {        System.out.println("开始吃饭了...");        hanZi.update("吃饭");    }//我的实现类public class HanZi {    /** */    public void update(String messgage) {        doSomeThing(messgage);    }    private void doSomeThing(String messgage) {        if ("上班".equals(messgage)) {            System.out.println("去接她");        }        if ("下班".equals(messgage)) {            System.out.println("去接她");        }        if ("吃饭".equals(messgage)){            System.out.println("请他吃饭");        }    }}执行方案类public class Client {    public static void main(String[] args) {        MeiZi meiZi = new MeiZi();        meiZi.shangban();        meiZi.chifan();        meiZi.xiaban();    }}

好的,阅读了上面代码中同学都会发现,妈的,不是说好单恋的那,怎么在妹子的世界里还有你的存在,仔细一看,是的呀,在MeiZi的类中怎么会出现 HanZi hanZi = new HanZi(); 不合理呀,难道每一个喜欢妹子的人,都要出现在妹子的世界吗?显然是不可能的,例如我,就从来没有出现过。
所以我就想了一种办法,是不是可以借助一个平台,例如一个社交工具,然后妹子注册,我也注册,那么妹子每次发心情的时候我可以了解了呢。我们来改下设计,

//建立妹子观察者的一个接口:public interface MeiZiObservable {    /** 添加一个观察者 */    public void addObserver();    /** 通知观察者*/    public void notityObjserver();}妹子实现类(现在想妹纸可以关注社交软件了,然后开心晒心情了)public class MeiZi implements MeiZiObservable{    private Set<HanziObserver> hanziObservers = new HashSet<HanziObserver>();    @Override    public void addObserver(HanziObserver hanziObserver) {        hanziObservers.add(hanziObserver);    }    @Override    public void notityObjserver(String message) {        Iterator<HanziObserver> hanziObserverIterator = hanziObservers.iterator();        while (hanziObserverIterator.hasNext()) {            HanziObserver hanziObserver = hanziObserverIterator.next();            hanziObserver.update(message);        }    }    /** 上班 */    public void shangban() {        System.out.println("开始上班了...");        notityObjserver("上班");    };    /** 下班 */    public void xiaban() {        System.out.println("开始下班了...");        notityObjserver("下班");    }    /** 吃饭 */    public void chifan() {        System.out.println("开始吃饭了...");        notityObjserver("吃饭");    }}观察者的接口(可以让喜欢关注妹纸的汉子都关注下)public interface HanziObserver {    public void update(String message);}汉子的实现类(汉子关注妹纸信息,请吃饭的请吃饭,接上下班的接上下班,还可以尾行,做自己想做的事情吧)public class HanZi implements HanziObserver{    public void update(String messgage) {        doSomeThing(messgage);    }    private void doSomeThing(String messgage) {        if ("上班".equals(messgage)) {            System.out.println("去接她");        }        if ("下班".equals(messgage)) {            System.out.println("去接她");        }        if ("吃饭".equals(messgage)){            System.out.println("请他吃饭");        }    }}//最后实现:public class Client {    public static void main(String[] args) {        HanziObserver hanziObserver = new HanZi();        MeiZi meiZi = new MeiZi();        meiZi.addObserver(hanziObserver);        meiZi.shangban();        meiZi.chifan();        meiZi.xiaban();    }}

是不是到这里,一个比较好的观察者就写好了呀。其实在Java的util包中帮助我们定义了Observable和Observer
本质上和我们上面定义的差不多。
Observable实现了对观察者的管理,添加,删除,通知消息等操作。
最后用Java自带的来演示下吧:

public class MeiZi extends Observable {    /** 上班 */    public void shangban() {        System.out.println("开始上班了...");        setChanged();        notifyObservers("上班");    };    /** 下班 */    public void xiaban() {        System.out.println("开始下班了...");        setChanged();        notifyObservers("下班");    }    /** 吃饭 */    public void chifan() {        System.out.println("开始吃饭了...");        setChanged();        notifyObservers("吃饭");    }}public class HanZi implements Observer{    /** */    public void update(Observable o, Object arg) {        doSomeThing(String.valueOf(arg));    }    private void doSomeThing(String messgage) {        if ("上班".equals(messgage)) {            System.out.println("去接她");        }        if ("下班".equals(messgage)) {            System.out.println("去接她");        }        if ("吃饭".equals(messgage)){            System.out.println("请他吃饭");        }    }}public class Client {    public static void main(String[] args) {        Observer hanziObserver = new HanZi();        MeiZi meiZi = new MeiZi();        meiZi.addObserver(hanziObserver);        meiZi.shangban();        meiZi.chifan();        meiZi.xiaban();    }}

好了,一个观察者模式的代码就写完了。是不是很简单呀,当然追女孩子也很简单哦,虽然我还没有成功的经历,如果以后我成功了,我会把经历来分享的。
爱代码,更爱生活。如果有什么错误或者想法交流的,希望大家加我的qq:1416011240。学习不仅仅是知识,还有做人的道理。谢谢

原创粉丝点击