設計模式之(二)---代理模式Proxy Pattern,proxypattern
什麼是代理模式呢?我很忙,忙的沒空理你,那你要找我呢就先找我的代理人吧,那代理人總要知道
被代理人能做哪些事情不能做哪些事情吧,那就是兩個人具備同一個介面,代理人雖然不能幹活,但是被
代理的人能幹活呀。
比如西門慶找潘金蓮,那潘金蓮不好意思回覆呀,咋辦,找那個王婆做代理,表現在程式上時這樣的:
先定義一種類型的女人(介面):
package com.fc.Proxy;public interface KindWoman {public void makeEyesWithMan(); //拋媚眼}
然後定義潘金蓮:
package com.fc.Proxy;public class PanJinlian implements KindWoman {public void makeEyesWithMan() {System.out.println("潘金蓮在拋媚眼。。。");}}
再來個王婆,也就是潘金蓮的代理人:
package com.fc.Proxy;public class WangPo implements KindWoman {private KindWoman kindwoman;public WangPo() {this. kindwoman = new PanJinlian();//王婆預設是潘金蓮的代理人}//王婆也可以是KindWomen的其他任何一個女人的代理,只要你是這一類型public WangPo(KindWoman kindWomen){ this. kindwoman = kindWomen; }public void makeEyesWithMan() { this. kindwoman.makeEyesWithMan(); //王婆這麼大年齡了,誰看她拋媚眼?!她代替別人拋 }}連個女豬腳已經登場,下面到西門慶了:
package com.fc.Proxy;public class XiMenQing {public static void main(String[] args) {//把王婆叫出來 WangPo wangPo = new WangPo(); //然後西門慶就說,我要和潘金蓮happy,然後王婆就安排了西門慶丟筷子的那齣戲: wangPo.makeEyesWithMan(); //看到沒,雖然表面上時王婆在做,實際上爽的是潘金蓮}}
好了現在王婆為西門慶代理完了,說不準她還得給別人代理,假設現在又來了個潘金蓮2號:
package com.fc.Proxy;public class PanJinlian222 implements KindWoman {public void makeEyesWithMan() {System.out.println("潘金蓮222在拋媚眼。。。");}}
然後西門慶又來找王婆幫忙勾引潘金蓮2號:修改西門慶:
package com.fc.Proxy;public class XiMenQing {public static void main(String[] args) {/*//把王婆叫出來 WangPo wangPo = new WangPo(); //然後西門慶就說,我要和潘金蓮happy,然後王婆就安排了西門慶丟筷子的那齣戲: wangPo.makeEyesWithMan(); //看到沒,雖然表面上時王婆在做,實際上爽的是潘金蓮*/WangPo wangPo=new WangPo(new PanJinlian222());//這個不是預設代理,要往裡傳個參數wangPo.makeEyesWithMan();}}
說完這個故事,那額總結一下,代理模式主要使用了 Java 的多態,幹活的是被代理類,代理類主要是
接活,你讓我幹活,好,我交給幕後的類去幹,你滿意就成,那怎麼知道被代理類能不能幹呢?同根就成,
大家知根知底,你能做啥,我能做啥都清楚的很,同一個介面唄。
來自:設計模式