一:什么是代理模式?
代理模式本质上就是控制对象的访问。为其他对象提供一种代理以控制这个对象的访问。什么意思呢?
比如,有一个对象载入需要很长的时间,那么你可以不立刻加载它,而是当真正需要的时候才去加载。
二:静态代理(以汽车销售代理为例)
结构图:
package Proxy.staticProxy; /** * 宝马销售接口 * @author Administrator * */ public interface IBMWSaler { //有一个卖宝马车的方法 public abstract void saleBMWCar(); }
package Proxy.staticProxy; /** * 宝马生产厂家也可以卖宝马车 * @author Administrator * */ public class BMWManufacturers implements IBMWSaler { @Override public void saleBMWCar() { System.out.println("BMW Manufacturers Sale the Car! "); } }
package Proxy.staticProxy; /** * XYZ 代理商 卖宝马车 * @author Administrator */ public class XYZBMWProxy implements IBMWSaler { //代理的是谁 private IBMWSaler BMWSaler; public XYZBMWProxy(IBMWSaler BMWSaler){ this.BMWSaler = BMWSaler; } public void saleBMWCar() { BMWSaler.saleBMWCar(); } }
package Proxy.staticProxy; public class Client { public static void main(String[] args) { //初始化一个生产厂家 IBMWSaler manufacturer = new BMWManufacturers(); //初始化一个代理商 IBMWSaler proxySaler = new XYZBMWProxy(manufacturer); //代理商销售汽车 proxySaler.saleBMWCar(); } }
2 保护代理: 即控制原始对象访问的代理
我们现在假设,控制汽车售价的权限只有生产厂家才具备。其他对象是不能控制这个价格的。
//.......
3 动态代理:主要体现在切面编程
结构图:
package Proxy.dynamicProxy; public interface Subject { void print(); }
package Proxy.dynamicProxy; public class RealSubject implements Subject { @Override public void print() { // TODO Auto-generated method stub System.out.println("我是真实对象"); } }
package Proxy.dynamicProxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class MyInvocationHandler implements InvocationHandler{ //被代理的对象 private Object target; //通过构造函数传递一个对象 public MyInvocationHandler(Object target){ this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub return method.invoke(this.target, args); } }
package Proxy.dynamicProxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; public class DynamicProxy<T> { public static <T> T newProxyInstance(ClassLoader loader,Class<?>[] interfaces, InvocationHandler handler){ if(true){ new BeforeAdvice().execute(); } //执行目标并返回结果 return (T)Proxy.newProxyInstance(loader, interfaces, handler); } }
package Proxy.dynamicProxy; public interface IAdvice { void execute(); }
package Proxy.dynamicProxy; public class BeforeAdvice implements IAdvice { @Override public void execute() { System.out.println("前置通知"); } }
package Proxy.dynamicProxy; import java.lang.reflect.InvocationHandler; public class Client { public static void main(String[] args) { //定义主题 Subject subject = new RealSubject(); //定义一个代理 InvocationHandler handler = new MyInvocationHandler(subject); //定义主题的代理 Subject proxy = DynamicProxy.newProxyInstance(subject.getClass().getClassLoader(), subject.getClass().getInterfaces(), handler); //代理的行为 proxy.print(); } }
4 虚拟代理 其实就是在需要的时候才初始化
public void saleBMWCar() { if(BMWSaler == null){ //在需要的时候才初始化主题对象 } }
相关推荐
全部高质量代理模式proxy的java源程序 java.proxy,代理模式源码,设计模式,apache开源项目源码commons-proxy-1.0-src 各种代理模式操作的工具类源码以及代理模式案例源码,你会从中得到意想不到的效果! apache...
为其他对象提供一个代理以控制对这个对象的访问。
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
代码仅供参考学习 。
NULL 博文链接:https://wy649898543.iteye.com/blog/1431997
java 代理模式demo ,主要就是对代理模式的一种实现过程,用于刚接触代理模式的人使用,里面介绍了两种代理模式,一种是静态代理,另一种是动态代理的实现Demo
设计模式C++学习之代理模式(Proxy)
2、代理模式(Proxy) 用意:为其它对象提供一种代理以控制对这个对象的访问
C#写的一份包含代理模式Proxy的基本实现代码和一个应用案例代码,有助于Proxy的理解和学以致用。
Android设计模式之代理模式(Proxy Pattern)
代理模式也是平时比较常用的设计模式之一,代理模式其实就是提供了一个新的对象,实现了对真实对象的操作,或成为真实对象的替身.在日常生活中也是很常见的.例如A要租房,为了省麻烦A会去找中介,中介会替代A去筛选房子,A...
2、代理模式PROXY PATTERN 3、单例模式SINGLETON PATTERN 4、多例模式MULTITION PATTERN 5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器...
代理模式java代码 Proxy(4) 开发宝典......
观察者模式 Observer:Swing中的事件模型 工厂模式 Factory:在JDK中遍地都是,比如JDBC、JNDI等,是...Strategy:java.util.Comparator就用到了它 代理模式 Proxy:学习Spring IoC容器必须掌握的模式 <br>
JAVA Proxy 代理模式
Proxy代理模式的经典实例(很有面向对象思想哦)。快速学会Proxy代理模式.
代理模式java代码 Proxy(1) java 学习必备......
java 代理模式实现代码及设计详解:动态代理模式、静态代理模式
Proxy Pattern 代理模式 采用JAVA实现,可以下载看看。
代理模式是一种设计模式,其定义是为其他对象提供一种代理以控制对这个对象的访问。 代理模式的核心在于提供一个代理来控制和限制对另一个对象的直接访问。这种模式通常用于以下几种情况: 远程代理:当对象位于...