不知正在閱讀本文的你可聽到了這首《最浪漫的事》?----我能想到最浪漫的事,就是和你一起慢慢變老.......
      
最浪漫的事
 背靠著背    坐在地毯上  聽聽音樂 聊聊愿望  你希望我越來越溫柔  我希望你放我在心上
 你說想送我個浪漫的夢想  謝謝我帶你找到天堂  哪怕用一輩子才能完 只要我講你就記住不忘
 我能想到最浪漫的事 就是和你一起慢慢變老  一路上收藏點點滴滴的歡笑 留到以后 坐著搖椅 慢慢聊
 我能想到最浪漫的事 就是和你一起慢慢變老  直到我們老的哪兒也去不了 你還依然 把我當成 手心里的寶
 
 背靠著背    坐在地毯上 聽聽音樂  聊聊愿望  你希望我越來越溫柔   我希望你放我在心上
 你說想送我個浪漫的夢想 謝謝我帶你找到天堂  哪怕用一輩子才能完成 只要我講你就記住不忘
 
 我能想到最浪漫的事 就是和你一起.......
 ........
 Over...
 
      

     聽聽這首歌,真的好浪漫啊。看看身邊的朋友都已經Find到了自己的對象了,而我自己還孤身一人。真的好羨慕他們的浪漫。在這里我就發發牢騷,給大家講一個浪漫而又凄慘的愛情故事吧!
    
     我有個同學叫張三,自打他找了他所謂的“寶貝”后,他倆那股曖昧和親熱勁啊真讓人受不了。到那都是寶貝啊,親愛的啊叫個不停。讓人聽了全身啊都麻了,真是有的像癩蛤蟆爬花椒樹:肉麻麻的。
     這個世界上的人啊太多了,帥哥也特別的多,正好我同學也算是一個帥哥吧,不過他和別的人可不一樣,脾氣好,對人好,從不發牢騷,也從不和別人計較。還樂意助人,心胸廣闊............這如果從面向對象的思想來看,好象可以進行抽象吧,提取共性(他和別的帥哥都有的特征,如女孩高興和不高興的時候,他們該是什么反映?):
 1package DesignPattern.Observer;
 2
 3import java.util.EventListener;
 4
 5/**
 6 * 事件監聽者接口--繼承于EventListener
 7 * 所有的監聽對象都繼承于此接口
 8 */

 9public interface EmotionListener extends EventListener  {
10    /**
11     * 當女朋友高興的時候我將會做什么?
12     * @param e--情感事件(事件對象)
13     */

14    void whatCanIdoWhenGirlHappy(EmotionEvent e);
15    
16    /**
17     * 當女朋友不高興的時候我將會做什么?
18     * @param e--情感事件(事件對象)
19     */

20    void whatCanIdoWhenGirlSad(EmotionEvent e);
21}

     仔細觀察發現,上面的帥哥抽象出得接口里方法帶有EmotionEvent類型的參數,這是什么東西?不好意思,上面忘說了,我在這里補充,EmotionEvent就是我這同學在認識了他女朋友后兩個人發生了感情,然后產生的情感事件(EmotionEvent),這東西可強大了,一下子就把兩個人關聯到一塊了,我們看看他的定義:

 1package DesignPattern.Observer;
 2
 3import java.util.EventObject;
 4
 5/**
 6 * 情感事件--繼承于事件對象(EventObject)
 7 * 事件對象
 8 */

 9public class EmotionEvent extends EventObject {
10    public EmotionEvent(Object source) {
11        super(source);
12    }

13    private static final long serialVersionUID = 1L;
14}

15

      正如前面所說,我這天下啊也算是帥哥的一種,那是不是他就應該實現于上面抽象出的帥哥(事件監聽)接口呢?答案是肯定的。好,那我們下面就來看看這位從不和別人鬧矛盾的善良帥哥"張三"同志,當女孩子不高興或是高興的時候他是怎么做的呢?

 1package DesignPattern.Observer;
 2
 3/**
 4 * 事件監聽者--監聽對象
 5 * 響應事件源(Girl)發起的事件對象(情感事件-EmotionEvent)
 6 */

 7public class HandSome implements EmotionListener {
 8    
 9    private String name;
10    public String getName() {
11        return name;
12    }

13    
14    public void setName(String name) {
15        this.name = name;
16    }

17    
18    public HandSome(String name) {
19        super();
20        this.name = name;
21    }

22
23    /**
24     * 當女朋友高興的時候我將會做什么?
25     * @param e--情感事件(事件對象)
26     */

27    public void whatCanIdoWhenGirlHappy(EmotionEvent e) {
28        Object o = e.getSource();
29        Girl girl = (Girl)o;
30        System.out.print(name + "說:" + girl.getName());
31        System.out.println(",你高興, 我也很高興!!!");
32    }

33
34    /**
35     * 當女朋友不高興的時候我將會做什么?
36     * @param e--情感事件(事件對象)
37     */

38    public void whatCanIdoWhenGirlSad(EmotionEvent e) {
39        Object o = e.getSource();
40        Girl girl = (Girl)o;
41        //
42        System.out.print(name + "說:" + girl.getName());
43        System.out.print(",你不高興, 我也會不高興的。");
44        System.out.println("寶貝,甭怕,你不高興的時候我會逗你開心的。");
45    }

46}

      哦,原來他是這樣的啊。女孩子高興的時候一起高興,不高興的時候,想盡一切辦法逗女孩子開心。哎呀,慚愧啊,怪說不得我找不到女朋友的,因為我不會逗女孩子開心。一個人孤單的生活,這問題嚴重的呢,看來得找個時間找這老同學學習學習,向其請教怎么逗女孩子開心。
      
      在上面一直提到的還有個美女怎么沒看到(張三的“寶貝”),那我們來看看這個大美女到底長什么樣,把我們張三都給迷倒了。

 1package DesignPattern.Observer;
 2
 3import java.util.ArrayList;
 4import java.util.List;
 5
 6/**
 7 *事件發起者--事件源
 8 */

 9public class Girl {
10    
11    public Girl(String name) {
12        super();
13        this.name = name;
14    }

15    private String name;
16    public String getName() {
17        return name;
18    }

19    
20    List<EmotionListener> boyFriends=new ArrayList<EmotionListener>();
21}

      好象這位大美女很小氣,只是告訴了我們她的名字,以及她的男朋友(在boyFriends集合里?不是吧,還用集合,不會她想實現一妻多夫吧?。】植?......).其實他也不是很小氣的,她悄悄的告訴了我,他說人們談戀愛吧,個誰在一起都有可能的,或許某個時候兩個人說88就88了。呵呵,看來這個美女很現實哈。于此,那她是不是還具備找到男朋友和分手的方法呢(這是我猜的)?

 1/**
 2* 女孩找到男朋友了---是誰?張三嗎?還是李四?
 3@param listener--事件監聽對象
 4*/

 5public void addEmotionListener(EmotionListener listener){
 6    this.boyFriends.add(listener);
 7    HandSome hs=(HandSome)listener;
 8    System.out.println(name+"說:好高興,我找到男朋友了,他叫:" + hs.getName() + ".");
 9}

10
11/**
12* 女孩失戀了.
13@param listener
14*/

15public void removeEmotionListener(EmotionListener listener){
16    this.boyFriends.remove(listener);
17    HandSome hs=(HandSome)listener;
18    System.out.println(name+" 說:親愛的" + hs.getName() + ",我不能沒有你,請不要離開我??!");
19}

      其實找到男朋友或是分手,這從事件模型上來看,也就是給事件源添加或注銷事件監聽對象。在JAVA的AWT事件模型里,事件源發起事件,事件監聽者接收到發出的事件對象,并做相應的處理。而本文中呢,則是事件源女孩(Girl)向她的男朋友事件監聽對象(HandSome)發起情感事件(EmotionEvent),她男朋友(HandSome)作為事件監聽對象(EmotionListener),應該響應事件源(Girl)發起的事件對象(情感事件-EmotionEvent)。Gril是如何向她的男朋友發起事件的呢?

1public void fire() {
2//女孩自己就是事件發起者,也就是事件源
3    EmotionEvent e = new  EmotionEvent(this);
4    for ( EmotionListener lis : boyFriends) {
5            lis.whatCanIdoWhenGirlHappy( e );
6            lis.whatCanIdoWhenGirlSad( e );
7  }

8}

 

Girl類的完整代碼

      女孩自己就是事件發起者,也就是事件源,通過調用監聽對象的方法把自己的信息(情感事件EmotionEvent)傳遞到心愛的男朋友處,接下來我們就來看看他們兩的浪漫愛情故事吧!

 1public class TestObserver {
 2    public static void main(String[] args) {
 3        
 4        //創建事件源對象--“寶貝”
 5        Girl g = new Girl("寶貝");
 6        //創建事件監聽對象
 7        EmotionListener listener = new HandSome("張三");
 8        //將響應者注冊到事件源
 9        //(將上面創建的帥哥(“張三”)設定為叫“寶貝”的這個美女的男朋友)
10        g.addEmotionListener(listener);
11        g.fire();    
12    }

13}
     
浪漫的事寶貝說:好高興,我找到男朋友了,他叫:張三.
張三說:寶貝,你高興, 我也很高興!!!
張三說:寶貝,你不高興, 我也會不高興的。寶貝,甭怕,你不高興的時候我會逗你開心的。

    幾個月后,他們的感情發生了問題,所謂的日久生情,日久也生疏。張三為了愛情的延續,以后的家庭生活,每天早出晚歸的工作。兩個人的感情淡了,正在這個時候,暗戀"寶貝"許久的 “周末”行動了,他假如了寶貝和張三的生活,成為了第三者,在寶貝的生活里就有了兩個男人,而對她都是一樣的好。

 1public class TestObserver {
 2    public static void main(String[] args) {
 3        
 4        //創建事件源對象--“寶貝”
 5        Girl g = new Girl("寶貝");
 6        //創建事件監聽對象
 7        EmotionListener listener = new HandSome("張三");
 8        //將響應者注冊到事件源
 9        //(將上面創建的帥哥(“張三”)設定為叫“寶貝”的這個美女的男朋友)
10        g.addEmotionListener(listener);
11        //第三者加入
12        EmotionListener lis = new HandSome("周末");
13        g.addEmotionListener(lis);
14        g.fire();    
15    }

16}
      
浪漫的事寶貝說:好高興,我找到男朋友了,他叫:張三.
寶貝說:好高興,我找到男朋友了,他叫:周末.
張三說:寶貝,你高興, 我也很高興!!!
張三說:寶貝,你不高興, 我也會不高興的。寶貝,甭怕,你不高興的時候我會逗你開心的。
周末說:寶貝,你高興, 我也很高興!!!
周末說:寶貝,你不高興, 我也會不高興的。寶貝,甭怕,你不高興的時候我會逗你開心的。

     我真的很佩服,帥哥就是帥哥,說話都是一樣,完全是從一個模型里套出來的。哎,看來我要學的還真多啊。說到這里,想想我的老同學張三啊,命苦啊,為了愛情整天忙碌的工作得到的確是冷落了心愛的“寶貝”,造成了第三者的加入,這時已是后悔...."這一切都是我錯了,冷落了人家,或許也不是我的錯,是她花心吧。不管怎樣,她都接受別人了我還能???" 張三說:最后做出決定,離開他的“寶貝”:

1//這個善良的張三見女孩子多了好象開始花心了
2//或許是應該張三冷落了他才會引起第三者的加入
3//張三很后悔,決定離開了他的"寶貝"
4g.removeEmotionListener(listener);

    當張三離開后,寶貝好象也后悔了,不想張三離開他:

   
哎,愛情總是這樣,擁有的時候不好好珍惜,直到失去后才后悔莫及,人世間的......寶貝 說:親愛的張三,我不能沒有你,請不要離開我??!


   總上所述,其實我們已經演繹了一個面向對象的設計模式--觀察者模式,事件模型就是觀察者模式的一種體現。本文只是趣味性的簡單解說了一下事件模型的實現過程,要深入學習面向對象設計模式請查看相關書籍或資料。

    哎,原本浪漫的愛情故事最終卻......,慚愧?。∥覀儙洑獾膹埲F在會做什么?會不會因為"寶貝"的請求又回到她身邊呢?還是徹底忘去舊愛,開始新的生活?要知詳細請關注下回分解。