Proxy模式之春節回家

來源:互聯網
上載者:User
?

?? Proxy模式之春節回家

1.?? 引言

昨天晚上,老媽打電話過來,問我買到火車票沒有,什麼時候能回家,言語中非常著急,這讓我想起了往事。我去年在成都,回家是非常方便的,包括春節。因為在成都,火車票非常好買。老媽從不用擔心我回家買不到車票,在她眼中,我買票相當於下面的類:

Package com.hongsoft.test;

Abstract public class GoHome

{

?? abstract public boolean buyTicket();

}

老媽眼中, buyTicket()方法總是返回true的,所以春節期間她從不過問我買票的事;我實際是怎麼買到的票呢?

2.?? 平常買票的辦法

我在成都買票都是自己去買的,如下:

package com.hongsoft.test;

public class RealGoHome extends GoHome

{

??? public boolean buyTicket()

??? {

??????? System.out.println(“掏錢,買票”);

??? }

}

正如老媽所想的那樣, buyTicket()方法總是返回true的,所以我總能很順利的買到票回家;但今年春節,不行了。

3.?? 今年買票的辦法

我今年到了廣州,廣州春節的票可真難買!我調用我的buyTicket()方法好多遍了,可每次都返回false,沒票!怎麼辦呢?不回去可不行啊,無奈中,我想到了火車票代理處。

我知道春節期間代理處是這麼買票的:

package com.hongsoft.test;

public class ProxyGoHome extends GoHome

{

??? private RealGoHome realGoHome;

??? //實現買票方法

??? public boolean buyTicket()

??? {

?????? preBuy();

?????? if(realGoHome==null)

?????????? realGoHome=new RealGoHome();

?????? realGoHome. buyTicket();

?????? postBuy();??????

??? }

??? //買票前的動作

??? private void preBuy()

??? {

?????? System.out.println(“打電話給關係人,讓關係人給售票點打聲招呼”);

??? }

??? //買票後的動作

??? private void postBuy()

??? {

?????? System.out.println(“請關係人Mixi Mixi”);

??? }

}

4.?? 總結

就這樣,通過火車票代理處,我今天順利地拿到了票!經驗總結如下:

1)????? 我通過火車票代理處買票的方式如下:

GoHome goHome=new ProxyGoHome();

GoHome.buyTicket();

但我聲明:代碼只用來學習Proxy模式,不能編譯運行!

2)???? 以上就是Proxy模式的應用,GoHome是抽象主體,RealGoHome是真實主體,ProxyGoHome是代理主體。

3)???? 應該在合適的地方應用該模式:

如果平常買票也用Proxy模式,不一定好,因為要花我的代理費啊!

但到了廣州的春節你還不用Proxy模式,………,呵呵,除非你不準備春節回家!

4)???? 本例中ProxyGoHome有preBuy()和postBuy()方法,在本例中,沒有他們,則買不到票;在實際的編程環境中,預先處理和後處理方法一般用來實現特定的功能:如管理資料庫串連,管理網路連接,實現存取控制,實現Cache,EJB用戶端預先處理等等。因為一個代理類為很多的客戶服務,所以,我們一般在預先處理和後處理方法中實現從代理中抽象出來的功能。

5) 要注意的是,Proxy是為客戶服務的,如本例,代理處是為我服務的;火車站不需要Proxy為火車站服務,這是Proxy模式與Facade模式的最本質的區別,以後的文章將會詳細分析這一點。

?

好了,就寫到這裡,我要給老媽打電話,讓她放心了!

?

hongbo781202,又名HongSoft,職業程式員,研究領域:1)基於工作流程的BPM系統研究2)基於JAVA的資訊安全

技術.歡迎和大家討論JAVA相關各方面技術和市場問題 hongbosoftware@163.com

?????

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.