java設計模式之——代理模式

1,什么是代理模式?
代理模式的作用是:為其他對象提供一種代理以控制對這個對象的訪問。

2,策略模式有什么好處?
在某些情況下,一個客戶不想或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。

3,代理模式一般涉及到的角色有:

抽象角色:聲明真實對象和代理對象的共同接口;

代理角色:代理對象角色內部含有對真實對象的引用,從而可以操作真實對象,同時代理對象提供與真實對象相同的接口以便在任何時刻都能代替真實對象。同時,代理對象可以在執行真實對象操作時,附加其他的操作,相當于對真實對象進行封裝。

真實角色:代理角色所代表的真實對象,是我們最終要引用的對象。

4,應用場景舉例:

比如西門慶找潘金蓮,那潘金蓮不好意思答復呀,咋辦,找那個王婆做代理,表現在程序上時是這樣的體現的
先說說這個場景中的要素:一種類型的女人,潘金蓮,王婆,西門慶,后來擴展的賈氏也和西門慶勾上了,我們是假設的,然后西門慶找潘金蓮happy,但潘金蓮不好意思直接,就找個王婆代理唄。我們看看具體代碼。

先定義一種女人

package com.yangguangfu.proxy;  
/** 
 *  
 * @author 阿福(trygf521@126.com)<br> 
 *定義一種類型的女人,王婆和潘金蓮都屬于這個類型的女人 
 */  
public interface KindWoman {  
      
    //這種女人能做什么事情呢?  
    public void makeEyesWithMan();//拋媚眼  
      
    public void happyWithMan();//和男人那個....  
  
}  
 
一種類型嘛,那肯定是接口,定義個潘金蓮
Java代碼  收藏代碼
package com.yangguangfu.proxy;  
/** 
 *  
 * @author 阿福(trygf521@126.com)<br> 
 *定義一個潘金蓮是什么樣的人 
 */  
public class PanJinLian  implements KindWoman{  
  
    @Override  
    public void happyWithMan() {  
        System.out.println("潘金蓮和男人在做那個...");  
          
    }  
  
    @Override  
    public void makeEyesWithMan() {  
        System.out.println("潘金蓮拋媚眼...");  
          
    }  
  
}  

再定義個丑陋的王婆

package com.yangguangfu.proxy;  
/** 
 *  
 * @author 阿福(trygf521@126.com)<br> 
 *王婆這個人老聰明了,她太老了,是個男人都看不上她, 
 *但是她有智慧經驗呀,他作為一類女人的代理! 
 */  
public class WangPo implements KindWoman {  
      
    private KindWoman kindWoman;  
      
    public WangPo(){  
        //默認的話是潘金蓮的代理  
        this.kindWoman = new PanJinLian();  
    }  
    //她可以是KindWomam的任何一個女人的代理,只要你是這一類型  
    public WangPo(KindWoman kindWoman){  
        this.kindWoman = kindWoman;  
    }  
  
    @Override  
    public void happyWithMan() {  
        //自己老了,干不了了,但可以叫年輕的代替。  
        this.kindWoman.happyWithMan();  
          
    }  
  
    @Override  
    public void makeEyesWithMan() {  
        //王婆年紀大了,誰看她拋媚眼啊  
        this.kindWoman.makeEyesWithMan();  
          
    }  
  
}  

兩個女主角都上場了,該男主角了,定義個西門慶

package com.yangguangfu.proxy;  
/** 
 *  
 * @author 阿福(trygf521@126.com)<br> 
 *水滸傳是這樣寫的:西門慶被潘金蓮用竹竿敲了一下,西門慶看癡迷了,被王婆看到了,就開始撮合兩人好事,王婆作為潘金蓮的代理人收了不少好處費,那我們假設一下: 
 *如果沒有王婆在中間牽線,這兩個不要臉的能成事嗎?難說得很! 
 */  
public class XiMenQiang {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        WangPo wangPo;  
        //把王婆叫出來  
         wangPo = new WangPo();  
        //然后西門慶說,我要和潘金蓮Happy,然后王婆就安排了西門慶丟筷子哪出戲:  
        wangPo.makeEyesWithMan();  
        //看到沒有表面是王婆在做,其實爽的是潘金蓮  
        wangPo.happyWithMan();  
          
          
  
    }  
  
}  

那這就是活生生的一個例子,通過代理人實現了某種目的,如果真去了王婆這個中間環節,直接西門慶和潘金蓮勾搭,估計很難成就武松殺嫂事件。
那我們再考慮一下,水滸里面還有沒有這類型的女人?有,盧俊義的老婆賈氏(就是和那個管家茍合的那個),這個名字起的:“賈氏”,那我們也讓王婆做她的代理:

package com.yangguangfu.proxy;  
/** 
 *  
 * @author 阿福(trygf521@126.com)<br> 
 *定義一個賈氏是什么樣的人 
 */  
public class JiaShi implements KindWoman {  
  
    @Override  
    public void happyWithMan() {  
        System.out.println("賈氏和男人在做那個...");  
          
    }  
  
    @Override  
    public void makeEyesWithMan() {  
        System.out.println("賈氏拋媚眼...");  
          
    }  
  
  
}  

西門慶勾潘金蓮又勾引賈氏

package com.yangguangfu.proxy;  
/** 
 *  
 * @author 阿福(trygf521@126.com)<br> 
 *水滸傳是這樣寫的:西門慶被潘金蓮用竹竿敲了一下,西門慶看癡迷了,被王婆看到了,就開始撮合兩人好事,王婆作為潘金蓮的代理人收了不少好處費,那我們假設一下: 
 *如果沒有王婆在中間牽線,這兩個不要臉的能成事嗎?難說得很! 
 */  
public class XiMenQiang {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        WangPo wangPo;  
        //把王婆叫出來  
         wangPo = new WangPo();  
        //然后西門慶說,我要和潘金蓮Happy,然后王婆就安排了西門慶丟筷子哪出戲:  
        wangPo.makeEyesWithMan();  
        //看到沒有表面是王婆在做,其實爽的是潘金蓮  
        wangPo.happyWithMan();  
          
          
          
        //西門慶勾引賈氏  
        JiaShi jiaShi = new JiaShi();  
        wangPo = new WangPo(jiaShi);  
        wangPo.makeEyesWithMan();  
        wangPo.happyWithMan();  
  
    }  
  
}  

說完這個故事,那我總結一下,代理模式主要使用了java的多態,干活的是被代理類,代理類主要是接活,你讓我干活,好,我交給幕后的類去干,你滿意就成,那怎么知道被代理類能不能干呢?同根就成,大家知根知底,你能做啥,我能做啥都清楚得很,同樣一個接口唄。好了不多說了,慢慢體會吧。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,595評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,560評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,814評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,224評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,444評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,988評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,804評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,998評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,237評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,706評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,993評論 2 374

推薦閱讀更多精彩內容

  • 代理模式 模式介紹 代理模式是對象的結構模式。代理模式給某一個對象提供一個代理對象,并由代理對象控制對原對象的引用...
    PeterHe888閱讀 245評論 0 0
  • Java設計模式之代理模式 代理模式 靜態代理 動態代理 為什么需要代理 通過代理,我們能夠不用知道委托人是誰,而...
    kingpengLin閱讀 359評論 0 3
  • 我愛我的夫,可我卻為他意亂情迷,只嘆,恨不相逢未嫁時。 ——宋朝寂寞閨閣里的女子,一個在迷惘中掙扎,在掙扎中淪陷的...
    文泉杰閱讀 37,901評論 29 43
  • 等來年 春暖花開 我同你看透全部綠色 等來年 陽光明媚 我帶你逛遍所有沙灘 等來年 秋高氣爽 我陪你走過大街小巷 ...
    梵十七閱讀 164評論 13 17
  • 也許所有的人都扮演著一個善良的角色,并以自己的規則來行動,表現各有不同。 焦慮癥,缺位的安全感,總是慌慌張張,現在...
    不忘初心_L閱讀 271評論 0 1