代理模式其实理解挺简单的,也就是说为其它对象提供代理来控制这个对象的访问
2.代理模式一般涉及的角色有:
抽象角色:声明真实对象与代理对象共同的接口;
代理角色:代理对象内部是对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便任何时候都能代替真实对象,同时代理对象可以在执行真实对象操作的时候,附加其它操作,相当于对真实对象的封装
真实角色:代理对象代表的是真实对象,是我们最终要引用的对象
举个例子吧:比如西门庆,王婆, 潘金莲 这个事情
先定义一个女人:
package org.liufeng.course.DesignPattern; /** * java设计模式-代理模式 * @Author wangkun * @Date 2016/9/8 10:07 */ public interface KindWoman { public void makeEyesWithMan();//抛媚眼 public void happyWithMan(); }
定义接口 ,潘金莲
package org.liufeng.course.DesignPattern.impl; import org.liufeng.course.DesignPattern.KindWoman; /** * * @Author wangkun * @Date 2016/9/8 10:14 */ public class Pjl implements KindWoman { @Override public void makeEyesWithMan() { System.out.println("潘金莲抛媚眼"); } @Override public void happyWithMan() { System.out.println("潘金莲那个"); } }
代理对象,王婆
package org.liufeng.course.DesignPattern.impl; import org.liufeng.course.DesignPattern.KindWoman; /** * @Author wangkun * @Date 2016/9/8 10:15 */ public class Wp implements KindWoman { private Pjl pjl; public Wp(){ pjl=new Pjl(); } @Override public void makeEyesWithMan() { pjl.makeEyesWithMan(); } @Override public void happyWithMan() { pjl.happyWithMan(); } }
两个女主角上场了,这个时候该男主角了,就是西门庆:
package org.liufeng.course.DesignPattern.impl; /** * @Author wangkun * @Date 2016/9/8 10:20 */ public class Xmq { public static void main(String[] args) { Wp wp=new Wp(); wp.happyWithMan(); wp.makeEyesWithMan(); } }总结一下,其实代理模式就是用到了java多态,干活的是被代理类,代理类只负责接活,好,你让我干活,我交给幕后去做,你满意就成,你怎么知道我行不行呢?同根就成,大家知根知底,你能做啥,不能做啥,大家清楚的很,同样一个接口