代理模式
代理模式有两个概念:代理者和被代理者,代理者要想在人前为被代理者处理各种事情,那么代理者就必须知道被代理者能够干什么。
代理者和被代理者其实是具有相同的功能的,只不过是代理在表面周旋,被代理者实际操作,那么用我们java来说要实现两者具有相同的功能,那么代理者和被代理者两个对象(Object)就是实现想通过的接口(interface)。
我现在用一个形象生动地来列子来描述一下代码模式,相信看过古装电视剧的同学们都知道里面少不有一个地方那就怡红院,里面有一个老鸨(代理者)、苏小小(被代理者)、陈圆圆(被代理者)、客官(调用代理者Object)。
IWomanProxy.java[代理者和被代理者公共接口]
/** *定义了一个怡红院女人做事的接口 */ public interface IWomanProxy{ public viod drinking();//陪喝 public void play();//陪玩 }
SuWomanProxy.java[苏小小的实现类]
public class SuWomanProxy{ public void drinking(){ system.out.printf("this is Suxiaoxiao dirnking method"); } public void play(){ system.out.printf("this is Suxiaoxiao play mehtod"); } }
ChenWomanProxy.java[陈圆圆的实现类]
public class SuWomanProxy{ public void drinking(){ system.out.printf("this is Chenyuayuan dirnking method"); } public void play(){ system.out.printf("this is Chenyuayuan play mehtod"); } }
….
MaWomanProxy[老鸨的实现类]
public class MaWomanProxy{ private IWomanProxy womanProxy; public MaWomanProxy(){ this.womanProxy=new ChenyuanyuanWomanProxy();//陈圆圆是头牌,首先做她的代理 } public MaWomanProxy(IWomanProxy iWomanProxy){ this.womanProxy=iWomanProxy; } //老鸨说可观进来我陪你喝几杯呀,其实真正喝的是陈圆圆或者苏小小,你也不愿意找老鸨啊,呵呵~~ public void drinking(){ this.womanProxy.drinking(); } public void play(){ this.womanProxy.play(); } }
Man.java[客官]
public class Man{ public static void main (String[] args){ //乡下客官一进城,就老鸨来陪喝酒,陪玩 MaWomanProxy mama=MaWomanProxy();//默认代理 mama.drinking(); mama.play(); MaWomanProxy mama2=MaWomanProxy(new SuWomanProxy);//客官就是喜欢苏小小,老鸨也乐意 mama2.drinking(); mama2.play(); } }
以上例子应该可以体现代理模式的意思吧,呵呵,写得不好还请见谅~~~~