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

     聽聽這首歌,真的好浪漫啊。看看身邊的朋友都已經(jīng)Find到了自己的對(duì)象了,而我自己還孤身一人。真的好羨慕他們的浪漫。在這里我就發(fā)發(fā)牢騷,給大家講一個(gè)浪漫而又凄慘的愛情故事吧!
    
     我有個(gè)同學(xué)叫張三,自打他找了他所謂的“寶貝”后,他倆那股曖昧和親熱勁啊真讓人受不了。到那都是寶貝啊,親愛的啊叫個(gè)不停。讓人聽了全身啊都麻了,真是有的像癩蛤蟆爬花椒樹:肉麻麻的。
     這個(gè)世界上的人啊太多了,帥哥也特別的多,正好我同學(xué)也算是一個(gè)帥哥吧,不過他和別的人可不一樣,脾氣好,對(duì)人好,從不發(fā)牢騷,也從不和別人計(jì)較。還樂意助人,心胸廣闊............這如果從面向?qū)ο蟮乃枷雭砜矗孟罂梢赃M(jìn)行抽象吧,提取共性(他和別的帥哥都有的特征,如女孩高興和不高興的時(shí)候,他們?cè)撌鞘裁捶从常浚?
 1package DesignPattern.Observer;
 2
 3import java.util.EventListener;
 4
 5/**
 6 * 事件監(jiān)聽者接口--繼承于EventListener
 7 * 所有的監(jiān)聽對(duì)象都繼承于此接口
 8 */

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

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

20    void whatCanIdoWhenGirlSad(EmotionEvent e);
21}

     仔細(xì)觀察發(fā)現(xiàn),上面的帥哥抽象出得接口里方法帶有EmotionEvent類型的參數(shù),這是什么東西?不好意思,上面忘說了,我在這里補(bǔ)充,EmotionEvent就是我這同學(xué)在認(rèn)識(shí)了他女朋友后兩個(gè)人發(fā)生了感情,然后產(chǎn)生的情感事件(EmotionEvent),這東西可強(qiáng)大了,一下子就把兩個(gè)人關(guān)聯(lián)到一塊了,我們看看他的定義:

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

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

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

15

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

 1package DesignPattern.Observer;
 2
 3/**
 4 * 事件監(jiān)聽者--監(jiān)聽對(duì)象
 5 * 響應(yīng)事件源(Girl)發(fā)起的事件對(duì)象(情感事件-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     * 當(dāng)女朋友高興的時(shí)候我將會(huì)做什么?
25     * @param e--情感事件(事件對(duì)象)
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     * 當(dāng)女朋友不高興的時(shí)候我將會(huì)做什么?
36     * @param e--情感事件(事件對(duì)象)
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(",你不高興, 我也會(huì)不高興的。");
44        System.out.println("寶貝,甭怕,你不高興的時(shí)候我會(huì)逗你開心的。");
45    }

46}

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

 1package DesignPattern.Observer;
 2
 3import java.util.ArrayList;
 4import java.util.List;
 5
 6/**
 7 *事件發(fā)起者--事件源
 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集合里?不是吧,還用集合,不會(huì)她想實(shí)現(xiàn)一妻多夫吧!!恐怖.......).其實(shí)他也不是很小氣的,她悄悄的告訴了我,他說人們談戀愛吧,個(gè)誰在一起都有可能的,或許某個(gè)時(shí)候兩個(gè)人說88就88了。呵呵,看來這個(gè)美女很現(xiàn)實(shí)哈。于此,那她是不是還具備找到男朋友和分手的方法呢(這是我猜的)?

 1/**
 2* 女孩找到男朋友了---是誰?張三嗎?還是李四?
 3@param listener--事件監(jiān)聽對(duì)象
 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() + ",我不能沒有你,請(qǐng)不要離開我!!");
19}

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

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

8}

 

Girl類的完整代碼

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

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

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

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

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

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

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

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

    當(dāng)張三離開后,寶貝好象也后悔了,不想張三離開他:

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


   總上所述,其實(shí)我們已經(jīng)演繹了一個(gè)面向?qū)ο蟮脑O(shè)計(jì)模式--觀察者模式,事件模型就是觀察者模式的一種體現(xiàn)。本文只是趣味性的簡單解說了一下事件模型的實(shí)現(xiàn)過程,要深入學(xué)習(xí)面向?qū)ο笤O(shè)計(jì)模式請(qǐng)查看相關(guān)書籍或資料。

    哎,原本浪漫的愛情故事最終卻......,慚愧啊!我們帥氣的張三現(xiàn)在會(huì)做什么?會(huì)不會(huì)因?yàn)?寶貝"的請(qǐng)求又回到她身邊呢?還是徹底忘去舊愛,開始新的生活?要知詳細(xì)請(qǐng)關(guān)注下回分解。