使用代理模式之前需要知道代理模式能做什么? 能有哪些好处以及为什么要用代理模式.
Proxy模式又叫做代理模式,是构造型的设计模式之一,它可以为其他对象提供一种代理(Proxy)
以控制对这个对象的访问。所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理
下面是一个动态代理的实例:
package pack.java.proxy; /** * 主题接口; * @ClassName: Subject * @Description: TODO(这里用一句话描述这个类的作用) * @author Administrator * @date 2015-4-28 * */ public interface Subject { /** * 业务处理方法; * @Title: process * @Description: TODO(这里用一句话描述这个方法的作用) * @Params * @throws */ String process(); }
建立一个实现接口的方法:
package pack.java.proxy; /** * 实现主题接口 * @ClassName: RealSubject * @Description: TODO(这里用一句话描述这个类的作用) * @author Administrator * @date 2015-4-28 * */ public class RealSubject implements Subject{ @Override public String process() { before(); System.out.println("业务处理核心方法"); after(); return "处理方法."; } private void before(){ System.out.println("业务处理之前需要执行的方法."); } private void after(){ System.out.println("业务处理之后需要执行的方法."); } }
建立一个用于代理处理类:
package pack.java.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** * 动态代理; * @ClassName: ProxyHander * @Description: TODO(这里用一句话描述这个类的作用) * @author zhouhaitao * @date 2015-4-28 * */ public class ProxyHander implements InvocationHandler { private Subject subject; public void setSubject(Subject subject) { this.subject = subject; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //动态调用; Object obj = method.invoke(subject, args); return obj; } }
建立一个测试类,用于测试结果:
package pack.java.proxy; import java.lang.reflect.Proxy; public class MainClass { /** * @Title: main * @Description: TODO(这里用一句话描述这个方法的作用) * @Params * @throws */ public static void main(String[] args) { ProxyHander proxyHander = new ProxyHander(); Subject subject = new RealSubject(); //设置要代理的对象; proxyHander.setSubject(subject); //实例化代理类; Subject sub = (Subject)Proxy.newProxyInstance(RealSubject.class.getClassLoader(),RealSubject.class.getInterfaces(),proxyHander); String str = sub.process(); System.out.println("返回结果:"+str); } }
结果如下:
业务处理之前需要执行的方法.
业务处理核心方法
业务处理之后需要执行的方法.
返回结果:处理方法.
相关推荐
设计模式C++学习之代理模式(Proxy)
java.proxy,代理模式源码,设计模式,apache开源项目源码commons-proxy-1.0-src 各种代理模式操作的工具类源码以及代理模式案例源码,你会从中得到意想不到的效果! apache开源组织开发的开源项目源码,其优良的代码...
Java设计模式精讲-代理模式
Android设计模式之代理模式(Proxy Pattern)
1.1 什么是设计模式 2 1.2 Smalltalk MVC 中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...
为其他对象提供一个代理以控制对这个对象的访问。
代码仅供参考学习 。
设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制...
Java设计模式精讲-代理模式2
NULL 博文链接:https://wy649898543.iteye.com/blog/1431997
4.7 PROXY(代理)——对象结构型模式 4.8 结构型模式的讨论 第五章 行为模式 5.1 CHAIN OF RESPONSIBIL ITY(职责链)——对象行为型模式 5.2 COMMAND(命令)——对象行为型模式 5.3 INTERPRETER(解释器)——类...
java 代理模式实现代码及设计详解:动态代理模式、静态代理模式
代理模式(proxy)为其他对象提供一个代理以控制对这个对象的访问。结构图//Subject类,定义了RealSubjext和Proxy的公共接口,这样就在任何使用RealSubject的地方可以使用ProxyclassSubject{public:virtualvoidRequest...
- 代理模式(Proxy) - 适配器模式(Adapter) - 装饰器模式(Decorator) - 桥接模式(Bridge) - 组合模式(Composite) - 外观模式(Facade) - 享元模式(Flyweight) - 观察者模式(Observer) - 模板方法模式...
C#面向对象设计模式纵横谈(13):Proxy 代理模式(结构型模式)
设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制...
详解设计模式中的proxy代理模式及在Java程序中的实现共14页.pdf.zip
设计模式专题,代理模式,工厂模式
C#面向对象设计模式纵横谈(13):Proxy 代理模式(结构型模式) (Level 300)
《asp.net设计模式》涵盖了开发企业级asp.net应用程序的知名模式和最佳实践。本书用到的模式可以用于从asp.net1.0到asp.net 4.0的任何版本。不必管模式本身所用的语言,可以将模式用于任何面向对象编程语言。 ...