网站建设简单合同模板下载,最新网站模板免费下载,中国网络营销公司排名,网站如何创建首页文章目录 八、代理设计模式 八、代理设计模式
代理设计模式通过代理控制对象的访问#xff0c;可以详细访问某个对象的方法#xff0c;在这个方法调用处理#xff0c;或调用后处理。既(AOP微实现) 。
代理有分静态代理和动态代理#xff1a;
静态代理#xff1a;在程序… 文章目录 八、代理设计模式 八、代理设计模式
代理设计模式通过代理控制对象的访问可以详细访问某个对象的方法在这个方法调用处理或调用后处理。既(AOP微实现) 。
代理有分静态代理和动态代理
静态代理在程序运行前就已经存在代理类的字节码文件代理类和委托类的关系在运行前就确定了。动态代理是在使用时动态的生成代理对象他是在内存中构建代理对象的。
举个例子在做数据库操作时一般我们都会在事物中做SQL的操作那就需要在操作前开启事物操作后如果成功就需要提交事物如果代用代理设计模式就可以将事物开启提交逻辑放在代理类中被代理的类只需要关注业务逻辑即可。
下面以支付和事物为例演示下代理模式
采用静态代理实现上面例子
定义支付接口
public interface PayInterFace {void pay();
}定义微信支付实现
public class WxPay implements PayInterFace {Overridepublic void pay() {System.out.println(支付中...);}
}定义支付的代理类
public class PayProxy implements PayInterFace {private WxPay pay;public PayProxy(WxPay pay) {this.pay pay;}Overridepublic void pay() {System.out.println(事物开始);pay.pay();System.out.println(提交事物);}
}演示
public class demo {public static void main(String[] args) {PayInterFace pay new PayProxy(new WxPay());pay.pay();}
}上面的静态代理可以看出我们需要对每个被代理对象设计一个代理类如果代理的功能非常多那就需要开发人员写特别多的代理类下面可以看下动态代理的使用。
采用动态代理实现上面例子 这里使用JDK自带的动态代理来实现
再定义一个支付宝的支付实现
public class ZfbPay implements PayInterFace {Overridepublic void pay() {System.out.println(支付宝支付中...);}
}定义代理对象采用jdk的 InvocationHandler 接口
public class PayProxy implements InvocationHandler {private Object object;public PayProxy(Object object) {this.object object;}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(事物开始);Object result method.invoke(object, args);System.out.println(提交事物);return result;}
}演示
public class demo {public static void main(String[] args) {PayInterFace pay (PayInterFace) Proxy.newProxyInstance(PayInterFace.class.getClassLoader(),new Class[]{PayInterFace.class},new PayProxy(new WxPay()));pay.pay();PayInterFace pay1 (PayInterFace) Proxy.newProxyInstance(PayInterFace.class.getClassLoader(),new Class[]{PayInterFace.class},new PayProxy(new ZfbPay()));pay1.pay();}
}上面使用一个代理类代理了多个对象相对于静态代理是代码更简介灵活性也更高。