版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。[url]http://beniao.blog.51cto.com/389148/78630[/url]
       不知正在阅读本文的你可听到了这首《最浪漫的事》?----我能想到最浪漫的事,就是和你一起慢慢变老.......
        听听这首歌,真的好浪漫啊。看看身边的朋友都已经Find到了自己的对象了,而我自己还孤身一人。真的好羡慕他们的浪漫。在这里我就发发牢骚,给大家讲一个浪漫而又凄惨的爱情故事吧!
 
 我有个同学叫张三,自打他找了他所谓的“宝贝”后,他俩那股暧昧和亲热劲啊真让人受不了。到那都是宝贝啊,亲爱的啊叫个不停。让人听了全身啊都麻了,真是有的像癞蛤蟆爬花椒树:肉麻麻的。
     这 个世界上的人啊太多了,帅哥也特别的多,正好我同学也算是一个帅哥吧,不过他和别的人可不一样,脾气好,对人好,从不发牢骚,也从不和别人计较。还乐意助 人,心胸广阔............这如果从面向对象的思想来看,好象可以进行抽象吧,提取共性(他和别的帅哥都有的特征,如女孩高兴和不高兴的时候, 他们该是什么反映?):
 1谈爱情故事,谈观察者模式 _模式package DesignPattern.Observer;
 2谈爱情故事,谈观察者模式 _模式
 3谈爱情故事,谈观察者模式 _模式import java.util.EventListener;
 4谈爱情故事,谈观察者模式 _模式
 5谈爱情故事,谈观察者模式 _职场_05/**
 6谈爱情故事,谈观察者模式 _职场_07 * 事件监听者接口--继承于EventListener
 7谈爱情故事,谈观察者模式 _职场_07 * 所有的监听对象都继承于此接口
 8谈爱情故事,谈观察者模式 _模式_09 */

 9谈爱情故事,谈观察者模式 _休闲_10public interface EmotionListener extends EventListener  {
10谈爱情故事,谈观察者模式 _休闲_13    /**
11谈爱情故事,谈观察者模式 _职场_07     * 当女朋友高兴的时候我将会做什么?
12谈爱情故事,谈观察者模式 _职场_07     * @param e--情感事件(事件对象)
13谈爱情故事,谈观察者模式 _休闲_17     */

14谈爱情故事,谈观察者模式 _职场_07    void whatCanIdoWhenGirlHappy(EmotionEvent e);
15谈爱情故事,谈观察者模式 _职场_07    
16谈爱情故事,谈观察者模式 _职场_20    /**
17谈爱情故事,谈观察者模式 _职场_07     * 当女朋友不高兴的时候我将会做什么?
18谈爱情故事,谈观察者模式 _职场_07     * @param e--情感事件(事件对象)
19谈爱情故事,谈观察者模式 _休闲_17     */

20谈爱情故事,谈观察者模式 _职场_07    void whatCanIdoWhenGirlSad(EmotionEvent e);
21谈爱情故事,谈观察者模式 _模式_09}
     仔细观察发现,上面的帅哥抽象出得接口里方法带有EmotionEvent类型的参数,这是什么东西?不好意思,上面忘说了,我在这里补 充,EmotionEvent就是我这同学在认识了他女朋友后两个人发生了感情,然后产生的情感事件(EmotionEvent),这东西可强大了,一下 子就把两个人关联到一块了,我们看看他的定义:
 1谈爱情故事,谈观察者模式 _模式package DesignPattern.Observer;
 2谈爱情故事,谈观察者模式 _模式
 3谈爱情故事,谈观察者模式 _模式import java.util.EventObject;
 4谈爱情故事,谈观察者模式 _模式
 5谈爱情故事,谈观察者模式 _模式_31/**
 6谈爱情故事,谈观察者模式 _职场_07 * 情感事件--继承于事件对象(EventObject)
 7谈爱情故事,谈观察者模式 _职场_07 * 事件对象
 8谈爱情故事,谈观察者模式 _模式_09 */

 9谈爱情故事,谈观察者模式 _职场_36public class EmotionEvent extends EventObject {
10谈爱情故事,谈观察者模式 _职场_39    public EmotionEvent(Object source) {
11谈爱情故事,谈观察者模式 _职场_07        super(source);
12谈爱情故事,谈观察者模式 _休闲_17    }

13谈爱情故事,谈观察者模式 _职场_07    private static final long serialVersionUID = 1L;
14谈爱情故事,谈观察者模式 _模式_09}

15谈爱情故事,谈观察者模式 _模式
      正如前面所说,我这天下啊也算是帅哥的一种,那是不是他就应该实现于上面抽象出的帅哥(事件监听)接口呢?答案是肯定的。好,那我们下面就来看看这位从不和别人闹矛盾的善良帅哥"张三"同志,当女孩子不高兴或是高兴的时候他是怎么做的呢?
 1谈爱情故事,谈观察者模式 _模式package DesignPattern.Observer;
 2谈爱情故事,谈观察者模式 _模式
 3谈爱情故事,谈观察者模式 _休闲_49/**
 4谈爱情故事,谈观察者模式 _职场_07 * 事件监听者--监听对象
 5谈爱情故事,谈观察者模式 _职场_07 * 响应事件源(Girl)发起的事件对象(情感事件-EmotionEvent)
 6谈爱情故事,谈观察者模式 _模式_09 */

 7谈爱情故事,谈观察者模式 _模式_54public class HandSome implements EmotionListener {
 8谈爱情故事,谈观察者模式 _职场_07    
 9谈爱情故事,谈观察者模式 _职场_07    private String name;
10谈爱情故事,谈观察者模式 _C/C++_59    public String getName() {
11谈爱情故事,谈观察者模式 _职场_07        return name;
12谈爱情故事,谈观察者模式 _休闲_17    }

13谈爱情故事,谈观察者模式 _职场_07    
14谈爱情故事,谈观察者模式 _职场_65    public void setName(String name) {
15谈爱情故事,谈观察者模式 _职场_07        this.name = name;
16谈爱情故事,谈观察者模式 _休闲_17    }

17谈爱情故事,谈观察者模式 _职场_07    
18谈爱情故事,谈观察者模式 _观察者_71    public HandSome(String name) {
19谈爱情故事,谈观察者模式 _职场_07        super();
20谈爱情故事,谈观察者模式 _职场_07        this.name = name;
21谈爱情故事,谈观察者模式 _休闲_17    }

22谈爱情故事,谈观察者模式 _职场_07
23谈爱情故事,谈观察者模式 _观察者_78    /**
24谈爱情故事,谈观察者模式 _职场_07     * 当女朋友高兴的时候我将会做什么?
25谈爱情故事,谈观察者模式 _职场_07     * @param e--情感事件(事件对象)
26谈爱情故事,谈观察者模式 _休闲_17     */

27谈爱情故事,谈观察者模式 _C/C++_83    public void whatCanIdoWhenGirlHappy(EmotionEvent e) {
28谈爱情故事,谈观察者模式 _职场_07        Object o = e.getSource();
29谈爱情故事,谈观察者模式 _职场_07        Girl girl = (Girl)o;
30谈爱情故事,谈观察者模式 _职场_07        System.out.print(name + "说:" + girl.getName());
31谈爱情故事,谈观察者模式 _职场_07        System.out.println(",你高兴, 我也很高兴!!!");
32谈爱情故事,谈观察者模式 _休闲_17    }

33谈爱情故事,谈观察者模式 _职场_07
34谈爱情故事,谈观察者模式 _职场_92    /**
35谈爱情故事,谈观察者模式 _职场_07     * 当女朋友不高兴的时候我将会做什么?
36谈爱情故事,谈观察者模式 _职场_07     * @param e--情感事件(事件对象)
37谈爱情故事,谈观察者模式 _休闲_17     */

38谈爱情故事,谈观察者模式 _职场_97    public void whatCanIdoWhenGirlSad(EmotionEvent e) {
39谈爱情故事,谈观察者模式 _职场_07        Object o = e.getSource();
40谈爱情故事,谈观察者模式 _职场_07        Girl girl = (Girl)o;
41谈爱情故事,谈观察者模式 _职场_07        //
42谈爱情故事,谈观察者模式 _职场_07        System.out.print(name + "说:" + girl.getName());
43谈爱情故事,谈观察者模式 _职场_07        System.out.print(",你不高兴, 我也会不高兴的。");
44谈爱情故事,谈观察者模式 _职场_07        System.out.println("宝贝,甭怕,你不高兴的时候我会逗你开心的。");
45谈爱情故事,谈观察者模式 _休闲_17    }

46谈爱情故事,谈观察者模式 _模式_09}
      哦,原来他是这样的啊。女孩子高兴的时候一起高兴,不高兴的时候,想尽一切办法逗女孩子开心。哎呀,惭愧啊,怪说不得我找不到女朋友的,因为我不会逗女孩 子开心。一个人孤单的生活,这问题严重的呢,看来得找个时间找这老同学学习学习,向其请教怎么逗女孩子开心。
      
      在上面一直提到的还有个美女怎么没看到(张三的“宝贝”),那我们来看看这个大美女到底长什么样,把我们张三都给迷倒了。
 1谈爱情故事,谈观察者模式 _模式package DesignPattern.Observer;
 2谈爱情故事,谈观察者模式 _模式
 3谈爱情故事,谈观察者模式 _模式import java.util.ArrayList;
 4谈爱情故事,谈观察者模式 _模式import java.util.List;
 5谈爱情故事,谈观察者模式 _模式
 6谈爱情故事,谈观察者模式 _职场_113/**
 7谈爱情故事,谈观察者模式 _职场_07 *事件发起者--事件源
 8谈爱情故事,谈观察者模式 _模式_09 */

 9谈爱情故事,谈观察者模式 _职场_117public class Girl {
10谈爱情故事,谈观察者模式 _职场_07    
11谈爱情故事,谈观察者模式 _职场_121    public Girl(String name) {
12谈爱情故事,谈观察者模式 _职场_07        super();
13谈爱情故事,谈观察者模式 _职场_07        this.name = name;
14谈爱情故事,谈观察者模式 _休闲_17    }

15谈爱情故事,谈观察者模式 _职场_07    private String name;
16谈爱情故事,谈观察者模式 _模式_128    public String getName() {
17谈爱情故事,谈观察者模式 _职场_07        return name;
18谈爱情故事,谈观察者模式 _休闲_17    }

19谈爱情故事,谈观察者模式 _职场_07    
20谈爱情故事,谈观察者模式 _职场_07    List<EmotionListener> boyFriends=new ArrayList<EmotionListener>();
21谈爱情故事,谈观察者模式 _模式_09}
      好象这位大美女很小气,只是告诉了我们她的名字,以及她的男朋友(在boyFriends集合里?不是吧,还用集合,不会她想实现一妻多夫吧!!恐 怖.......).其实他也不是很小气的,她悄悄的告诉了我,他说人们谈恋爱吧,个谁在一起都有可能的,或许某个时候两个人说88就88了。呵呵,看来 这个美女很现实哈。于此,那她是不是还具备找到男朋友和分手的方法呢(这是我猜的)?
 1谈爱情故事,谈观察者模式 _职场_136/**
 2谈爱情故事,谈观察者模式 _职场_07* 女孩找到男朋友了---是谁?张三吗?还是李四?
 3谈爱情故事,谈观察者模式 _职场_07@param listener--事件监听对象
 4谈爱情故事,谈观察者模式 _模式_09*/

 5谈爱情故事,谈观察者模式 _观察者_141public void addEmotionListener(EmotionListener listener){
 6谈爱情故事,谈观察者模式 _职场_07    this.boyFriends.add(listener);
 7谈爱情故事,谈观察者模式 _职场_07    HandSome hs=(HandSome)listener;
 8谈爱情故事,谈观察者模式 _职场_07    System.out.println(name+"说:好高兴,我找到男朋友了,他叫:" + hs.getName() + ".");
 9谈爱情故事,谈观察者模式 _模式_09}

10谈爱情故事,谈观察者模式 _模式
11谈爱情故事,谈观察者模式 _C/C++_149/**
12谈爱情故事,谈观察者模式 _职场_07* 女孩失恋了谈爱情故事,谈观察者模式 _模式_12谈爱情故事,谈观察者模式 _模式_12.
13谈爱情故事,谈观察者模式 _职场_07@param listener
14谈爱情故事,谈观察者模式 _模式_09*/

15谈爱情故事,谈观察者模式 _观察者_156public void removeEmotionListener(EmotionListener listener){
16谈爱情故事,谈观察者模式 _职场_07    this.boyFriends.remove(listener);
17谈爱情故事,谈观察者模式 _职场_07    HandSome hs=(HandSome)listener;
18谈爱情故事,谈观察者模式 _职场_07    System.out.println(name+" 说:亲爱的" + hs.getName() + ",我不能没有你,请不要离开我!!");
19谈爱情故事,谈观察者模式 _模式_09}
      其实找到男朋友或是分手,这从事件模型上来看,也就是给事件源添加或注销事件监听对象。在JAVA的AWT事件模型里,事件源发起事件,事件监听者接收到发出的事件对象,并做相应的处理。而本文中呢,则是事 件源女孩(Girl)向她的男朋友事件监听对象(HandSome)发起情感事件(EmotionEvent),她男朋友(HandSome)作为事件监 听对象(EmotionListener),应该响应事件源(Girl)发起的事件对象(情感事件-EmotionEvent)。Gril是如何向她的男 朋友发起事件的呢?
1谈爱情故事,谈观察者模式 _模式_163public void fire() {
2谈爱情故事,谈观察者模式 _职场_07//女孩自己就是事件发起者,也就是事件源
3谈爱情故事,谈观察者模式 _职场_07    EmotionEvent e = new  EmotionEvent(this);
4谈爱情故事,谈观察者模式 _休闲_168    for ( EmotionListener lis : boyFriends) {
5谈爱情故事,谈观察者模式 _职场_07            lis.whatCanIdoWhenGirlHappy( e );
6谈爱情故事,谈观察者模式 _职场_07            lis.whatCanIdoWhenGirlSad( e );
7谈爱情故事,谈观察者模式 _休闲_17  }

8谈爱情故事,谈观察者模式 _模式_09}
 
谈爱情故事,谈观察者模式 _观察者_175Girl类的完整代码
      女孩自己就是事件发起者,也就是事件源,通过调用监听对象的方法把自己的信息(情感事件EmotionEvent)传递到心爱的男朋友处,接下来我们就来看看他们两的浪漫爱情故事吧!
 1谈爱情故事,谈观察者模式 _职场_247public class TestObserver {
 2谈爱情故事,谈观察者模式 _休闲_250    public static void main(String[] args) {
 3谈爱情故事,谈观察者模式 _职场_07        
 4谈爱情故事,谈观察者模式 _职场_07        //创建事件源对象--“宝贝”
 5谈爱情故事,谈观察者模式 _职场_07        Girl g = new Girl("宝贝");
 6谈爱情故事,谈观察者模式 _职场_07        //创建事件监听对象
 7谈爱情故事,谈观察者模式 _职场_07        EmotionListener listener = new HandSome("张三");
 8谈爱情故事,谈观察者模式 _职场_07        //将响应者注册到事件源
 9谈爱情故事,谈观察者模式 _职场_07        //(将上面创建的帅哥(“张三”)设定为叫“宝贝”的这个美女的男朋友)
10谈爱情故事,谈观察者模式 _职场_07        g.addEmotionListener(listener);
11谈爱情故事,谈观察者模式 _职场_07        g.fire();    
12谈爱情故事,谈观察者模式 _休闲_17    }

13谈爱情故事,谈观察者模式 _模式_09}
     
浪漫的事宝贝说:好高兴,我找到男朋友了,他叫:张三.
张三说:宝贝,你高兴, 我也很高兴!!!
张三说:宝贝,你不高兴, 我也会不高兴的。宝贝,甭怕,你不高兴的时候我会逗你开心的。
    几个月后,他们的感情发生了问题,所谓的日久生情,日久也生疏。张三为了爱情的延续,以后的家庭生活,每天早出晚归的工作。两个人的感情淡了,正在这个时 候,暗恋"宝贝"许久的 “周末”行动了,他假如了宝贝和张三的生活,成为了第三者,在宝贝的生活里就有了两个男人,而对她都是一样的好。
 1谈爱情故事,谈观察者模式 _观察者_264public class TestObserver {
 2谈爱情故事,谈观察者模式 _休闲_267    public static void main(String[] args) {
 3谈爱情故事,谈观察者模式 _职场_07        
 4谈爱情故事,谈观察者模式 _职场_07        //创建事件源对象--“宝贝”
 5谈爱情故事,谈观察者模式 _职场_07        Girl g = new Girl("宝贝");
 6谈爱情故事,谈观察者模式 _职场_07        //创建事件监听对象
 7谈爱情故事,谈观察者模式 _职场_07        EmotionListener listener = new HandSome("张三");
 8谈爱情故事,谈观察者模式 _职场_07        //将响应者注册到事件源
 9谈爱情故事,谈观察者模式 _职场_07        //(将上面创建的帅哥(“张三”)设定为叫“宝贝”的这个美女的男朋友)
10谈爱情故事,谈观察者模式 _职场_07        g.addEmotionListener(listener);
11谈爱情故事,谈观察者模式 _职场_07        //第三者加入
12谈爱情故事,谈观察者模式 _职场_07        EmotionListener lis = new HandSome("周末");
13谈爱情故事,谈观察者模式 _职场_07        g.addEmotionListener(lis);
14谈爱情故事,谈观察者模式 _职场_07        g.fire();    
15谈爱情故事,谈观察者模式 _休闲_17    }

16谈爱情故事,谈观察者模式 _模式_09}
      
浪漫的事宝贝说:好高兴,我找到男朋友了,他叫:张三.
宝贝说:好高兴,我找到男朋友了,他叫:周末.
张三说:宝贝,你高兴, 我也很高兴!!!
张三说:宝贝,你不高兴, 我也会不高兴的。宝贝,甭怕,你不高兴的时候我会逗你开心的。
周末说:宝贝,你高兴, 我也很高兴!!!
周末说:宝贝,你不高兴, 我也会不高兴的。宝贝,甭怕,你不高兴的时候我会逗你开心的。
     我真的很佩服,帅哥就是帅哥,说话都是一样,完全是从一个模型里套出来的。哎,看来我要学的还真多啊。说到这里,想想我的老同学张三啊,命苦啊,为了爱情 整天忙碌的工作得到的确是冷落了心爱的“宝贝”,造成了第三者的加入,这时已是后悔...."这一切都是我错了,冷落了人家,或许也不是我的错,是她花心 吧。不管怎样,她都接受别人了我还能???" 张三说:最后做出决定,离开他的“宝贝”:
1谈爱情故事,谈观察者模式 _模式//这个善良的张三见女孩子多了好象开始花心了
2谈爱情故事,谈观察者模式 _模式//或许是应该张三冷落了他才会引起第三者的加入
3谈爱情故事,谈观察者模式 _模式//张三很后悔,决定离开了他的"宝贝"
4谈爱情故事,谈观察者模式 _模式g.removeEmotionListener(listener);
    当张三离开后,宝贝好象也后悔了,不想张三离开他:
   
哎,爱情总是这样,拥有的时候不好好珍惜,直到失去后才后悔莫及,人世间的......宝贝 说:亲爱的张三,我不能没有你,请不要离开我!!


   总上所述,其实我们已经演绎了一个面向对象的设计模式--观察者模式,事件模型就是观察者模式的一种体现。本文只是趣味性的简单解说了一下事件模型的实现过程,要深入学习面向对象设计模式请查看相关书籍或资料。

    哎,原本浪漫的爱情故事最终却......,惭愧啊!我们帅气的张三现在会做什么?会不会因为"宝贝"的请求又回到她身边呢?还是彻底忘去旧爱,开始新的生活?要知详细请关注下回分解。