设计模式之《结构型模式》版块(基于Java) (17)

设计模式之《结构型模式》版块(基于Java)

代码示例 //目标对象/被代理对象 public class TeacherDao{ public void teach() { System.out.println("老师授课中... < cglib代理不需要实现接口 > "); } } //------------------------------------------------------------------------- //代理对象工厂 public class ProxyFactory implements MethodInterceptor { /**维护一个目标对象*/ private Object target; /**传入被代理的对象*/ public ProxyFactory(Object target) { this.target = target; } /**返回当前维护的目标对象(target)的代理对象*/ public Object getProxyInstance(){ //1.创建一个工具类 Enhancer enhancer = new Enhancer(); //2.设置父类 enhancer.setSuperclass(target.getClass()); //3.设置回调函数 this反过来调自己 enhancer.setCallback(this); //4.创建子类对象 即代理对象 return enhancer.create(); } /** * 重写 intercept方法,会调用目标对象的方法 */ @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { System.out.println("Cglib代理模式...开始"); Object result = method.invoke(target, objects); System.out.println("Cglib代理提交..."); return result; } } //------------------------------------------------------------------------- //测试 public class Client { public static void main(String[] args) { //创建目标对象 TeacherDao teacherDao = new TeacherDao(); //获取到代理对象,并且将目标对象传递给代理对象 TeacherDao proxyInstance = (TeacherDao)new ProxyFactory(teacherDao).getProxyInstance(); //执行代理对象的方法 触发intercept方法 从而实现对目标对象的调用 proxyInstance.teach(); } } 代理模式(Proxy)的变体

防火墙代理:内网通过代理穿透防火墙,实现对公网的访问。

缓存代理:比如:当请求图片文件等资源时,先到缓存代理取,如果取到资源则ok,如果取不到资源, 再到公网或者数据库取,然后缓存。

远程代理远程对象的本地代表,通过它可以把远程对象当本地对象来调用。远程代理通过网络和 真正的远程对象沟通信息。

设计模式之《结构型模式》版块(基于Java)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzjxd.html