简介:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用和访问。可以对该对象访问前、访问后、发生异常等情况的处理。可理解为对类增强的一种手段(继承、装饰、代理)。
一、作用
中介隔离作用:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。
开闭原则,增加功能:代理类除了是客户类和委托类的中介之外,我们还可以通过给代理类增加额外的功能来扩展委托类的功能,这样做我们只需要修改代理类而不需要再修改委托类,符合代码设计的开闭原则。代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后对返回结果的处理等。代理类本身并不真正实现服务,而是同过调用委托类的相关方法,来提供特定的服务。真正的业务功能还是由委托类来实现,但是可以在业务功能执行的前后加入一些公共的服务。例如我们想给项目加入缓存、日志这些功能,我们就可以使用代理类来完成,而没必要打开已经封装好的委托类。
二、代理模式分类
静态代理是由程序创建或特定工具自动生成源代码,在对其编译。在程序运行之前,代理类.class文件就已经被创建了。
动态代理是在程序运行时通过反射机制动态创建的。
三、代码实现
静态代理
// 第一步,创建服务类接口public interface buyhouse { void buyhosue();}/** * 第二步,实现服务接口 */public class buyhouseimpl implements buyhouse { @override public void buyhosue() { system.out.println("我要买房"); }}/** * 第三步,创建代理类 */public class buyhouseproxy implements buyhouse { private buyhouse buyhouse; public buyhouseproxy(final buyhouse buyhouse) { this.buyhouse = buyhouse; } @override public void buyhosue() { system.out.println("买房前准备"); buyhouse.buyhosue(); system.out.println("买房后装修"); }}/** * 第四步,编写实现类 */public class proxytest { public static void main(string[] args) { buyhouse buyhouse = new buyhouseimpl(); buyhouse.buyhosue(); buyhouseproxy buyhouseproxy = new buyhouseproxy(buyhouse); buyhouseproxy.buyhosue(); }}
动态代理
在动态代理中我们不再需要再手动的创建代理类,我们只需要编写一个动态处理器就可以了。真正的代理对象由jdk再运行时为我们动态的来创建。
/** * 第一步:编写动态处理器 */public class dynamicproxyhandler implements invocationhandler { private object object; public dynamicproxyhandler(final object object) { this.object = object; } @override public object invoke(object proxy, method method, object[] args) throws throwable { system.out.println("买房前准备"); object result = method.invoke(proxy, args); system.out.println("买房后装修"); return result; }}/** * 第二步:编写测试类 */public class dynamicproxytest { public static void main(string[] args) { buyhouse buyhouse = new buyhouseimpl(); buyhouse proxybuyhouse = (buyhouse) proxy.newproxyinstance(buyhouse.class.getclassloader(), new class[]{buyhouse.class}, new dynamicproxyhandler(buyhouse)); proxybuyhouse.buyhosue(); }}
相关推荐:
java常用设计模式详解-工厂模式
java设计模式之代理模式(proxy模式)介绍
视频教程:设计模式
以上就是java中常用的一种代理设计模式—示例总结的详细内容。