1,什么是代理模式?
代理模式的作用是:為其他對象提供一種代理以控制對這個對象的訪問。
2,策略模式有什么好處?
在某些情況下,一個客戶不想或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。
3,代理模式一般涉及到的角色有:
抽象角色:聲明真實對象和代理對象的共同接口;
代理角色:代理對象角色內部含有對真實對象的引用,從而可以操作真實對象,同時代理對象提供與真實對象相同的接口以便在任何時刻都能代替真實對象。同時,代理對象可以在執行真實對象操作時,附加其他的操作,相當於對真實對象進行封裝。
真實角色:代理角色所代表的真實對象,是我們最終要引用的對象。
引用設計模式之禪里面的例子:
什么是代理模式呢?我很忙,忙的沒空理你,那你要找我呢就先找我的代理人吧,那代理人總要知道被代理人能做哪些事情不能做哪些事情吧,那就是兩個人具備同一個接口,代理人雖然不能干活,但是被代理的人能干活呀。 比如西門慶找潘金蓮,那潘金蓮不好意思答復呀,咋辦,找那個王婆做代理,表現在程序上時這樣的: 先定義一種類型的女人: package com.cbf4life.proxy; /** * @author cbf4Life cbf4life@126.com * I'm glad to share my knowledge with you all. * 定義一種類型的女人,王婆和潘金蓮都屬於這個類型的女人 */ public interface KindWomen { //這種類型的女人能做什么事情呢? public void makeEyesWithMan(); //拋媚眼 public void happyWithMan(); //happy what? You know that! }
一種類型嘛,那肯定是接口,然后定義潘金蓮: package com.cbf4life.proxy; /** * @author cbf4Life cbf4life@126.com * I'm glad to share my knowledge with you all. * 定一個潘金蓮是什么樣的人 */ public class PanJinLian implements KindWomen { public void happyWithMan() { System.out.println("潘金蓮在和男人做那個....."); } public void makeEyesWithMan() { System.out.println("潘金蓮拋媚眼"); } }
再定一個丑陋的王婆: package com.cbf4life.proxy; /** * @author cbf4Life cbf4life@126.com * I'm glad to share my knowledge with you all. * 王婆這個人老聰明了,她太老了,是個男人都看不上, * 但是她有智慧有經驗呀,她作為一類女人的代理! */ public class WangPo implements KindWomen { private KindWomen kindWomen; public WangPo(){ //默認的話,是潘金蓮的代理 this.kindWomen = new PanJinLian(); } //她可以是KindWomen的任何一個女人的代理,只要你是這一類型 public WangPo(KindWomen kindWomen){ this.kindWomen = kindWomen; } public void happyWithMan() { this.kindWomen.happyWithMan(); //自己老了,干不了,可以讓年輕的代替 } public void makeEyesWithMan() { this.kindWomen.makeEyesWithMan(); //王婆這么大年齡了,誰看她拋媚眼?! } }
兩個女主角都上場了,男主角也該出現了: package com.cbf4life.proxy; /** * @author cbf4Life cbf4life@126.com * I'm glad to share my knowledge with you all. * 定義一個西門慶,這人色中餓鬼 */ public class XiMenQing { /* * 水滸里是這樣寫的:西門慶被潘金蓮用竹竿敲了一下難道,痴迷了, * 被王婆看到了, 就開始撮合兩人好事,王婆作為潘金蓮的代理人 * 收了不少好處費,那我們假設一下: * 如果沒有王婆在中間牽線,這兩個不要臉的能成嗎?難說的很! */ public static void main(String[] args) { //把王婆叫出來 WangPo wangPo = new WangPo(); //然后西門慶就說,我要和潘金蓮happy,然后王婆就安排了西門慶丟筷子的那出戲: wangPo.makeEyesWithMan(); //看到沒,雖然表面上時王婆在做,實際上爽的是潘金蓮 wangPo.happyWithMan(); } }