(二)代理模式
什么是代理模式呢?我很忙,忙的沒空理你,那你要找我呢就先找我的代理人吧,那代理人總要知道
被代理人能做哪些事情不能做哪些事情吧,那就是兩個人具備同一個接口,代理人雖然不能干活,但是被
代理的人能干活呀。?
比如西門慶找潘金蓮,那潘金蓮不好意思答復呀,咋辦,找那個王婆做代理,表現在程序上時這樣的: ?
先定義一種類型的女人:?
?
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();
}?
}?
那這就是活生生的一個例子,通過代理人實現了某種目的,如果真去掉王婆這個中間環節,直接是西門慶和潘金蓮勾搭,估計很難成就武松殺嫂事件。?
那我們再考慮一下,水滸里還有沒有這類型的女人?有,盧俊義的老婆賈氏(就是和那個固管家茍合的那個) ,這名字起的: “假使” ,那我們也讓王婆做她的代理:?
把賈氏素描出來:?
package com.cbf4life.proxy;?
?
/**?
?* @author cbf4Life cbf4life@126.com?
?* I'm glad to share my knowledge with you all.?
?*/?
public class JiaShi implements KindWomen {?
?
? public void happyWithMan() {?
? System.out.println("賈氏正在Happy中......");?
}?
?
? 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 XiMenQing {?
??
? public static void main(String[] args) {?
? ?//改編一下歷史,賈氏被西門慶勾走:?
? ? JiaShi jiaShi = new JiaShi();?
? ? WangPo wangPo = new WangPo(jiaShi); //讓王婆作為賈氏的代理人?
? ?
? wangPo.makeEyesWithMan();?
? wangPo.happyWithMan(); ? ?
?}?
}?
說完這個故事,那額總結一下,代理模式主要使用了 Java的多態,干活的是被代理類,代理類主要是接活,你讓我干活,好,我交給幕后的類去干,你滿意就成,那怎么知道被代理類能不能干呢?同根就成,大家知根知底,你能做啥,我能做啥都清楚的很,同一個接口唄。?
轉載于:https://www.cnblogs.com/wvqusrtg/p/4812965.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: 《Linux内核设计与实现》内存管理札记
- 下一篇: 2015年9月百度前端在线笔试