package com.oumyye.代理模式;/*** @author oumyye* 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.oumyye.代理模式;public class PanJinLian implements KindWomen {public void happyWithMan() { System. out.再定一個丑陋的王婆:package com.oumyye.代理模式;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(); //王婆這么大年齡了,誰看她拋媚眼?! }}兩個女主角都上場了,男主角也該出現(xiàn)了:package com.oumyye.代理模式;public class XiMenQing {/* * 水滸里是這樣寫的:西門慶被潘金蓮用竹竿敲了一下難道,癡迷了, * 被王婆看到了, 就開始撮合兩人好事,王婆作為潘金蓮的代理人 * 收了不少好處費,那我們假設一下: * 如果沒有王婆在中間牽線,這兩個不要臉的能成嗎?難說的很! */public static void main(String[] args) { //把王婆叫出來 WangPo wangPo = new WangPo(); //然后西門慶就說,我要和潘金蓮happy,然后王婆就安排了西門慶丟筷子的那出戲: wangPo.makeEyesWithMan(); //看到?jīng)],雖然表面上時王婆在做,實際上爽的是潘金蓮 wangPo.happyWithMan(); }}那這就是活生生的一個例子,通過代理人實現(xiàn)了某種目的,如果真去掉王婆這個中間環(huán)節(jié),直接是西門慶和潘金蓮勾搭,估計很難成就武松殺嫂事件。那我們再考慮一下,水滸里還有沒有這類型的女人?有,盧俊義的老婆賈氏(就是和那個固管家茍合>的那個),這名字起的:“假使”,那我們也讓王婆做她的代理:把賈氏素描出來:
package com.oumyye.代理模式;public class JiaShi implements KindWomen {public void happyWithMan() { System. out.println(" 賈氏正在Happy中......"); }public void makeEyesWithMan() { System. out.println(" 賈氏拋媚眼"); }}西門慶勾賈氏:
package com.oumyye.代理模式;public class XiMenQing2 {public static void main(String[] args) { //改編一下歷史,賈氏被西門慶勾走: JiaShi jiaShi = new JiaShi(); WangPo wangPo = new WangPo(jiaShi); //讓王婆作為賈氏的代理人 wangPo.makeEyesWithMan(); wangPo.happyWithMan(); }}說完這個故事,那額總結一下,代理模式主要使用了 java 的多態(tài),干活的是被代理類,代理類主要是接活,你讓我干活,好,我交給幕后的類去干,你滿意就成,那怎么知道被代理類能不能干呢?同根就成,大家知根知底,你能做啥,我能做啥都清楚的很,同一個接口唄。
新聞熱點
疑難解答