轻松掌握Java代理模式
程序员文章站
2024-03-31 20:57:22
定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
特点:...
定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
特点:
1、真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
2、代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
3、扩展性高
企业级开发和常用框架中的应用:最著名的就是spring的aop,还有spring的bean的创建其实也用到了代理
代理模式分为了动态代理和静态代理,动态代理是开发中应用的特别多。
静态代理:
/** * 以买房举例 */ interface actions { /** * 选房 */ public void selecthouse(); /** * 看房 */ public void seehouse(); /** * 入住 */ public void ruzhu(); } class realrole implements actions{ public void selecthouse() { system.out.println("用户自己选房"); } public void seehouse() { system.out.println("用户自己看房"); } public void ruzhu() { system.out.println("用户自己入住"); } } class proxyrole implements actions{ private realrole realrole; public proxyrole(realrole realrole) { this.realrole = realrole; } public void selecthouse() { system.out.println("中介选房"); } public void seehouse() { system.out.println("中介看房"); } @override public void ruzhu() { realrole.ruzhu(); } } public class demo { public static void main(string[] args) { realrole realrole = new realrole(); proxyrole proxyrole = new proxyrole(realrole); proxyrole.selecthouse(); proxyrole.seehouse(); proxyrole.ruzhu(); } }
动态代理:
/** * 以买房举例 */ interface actions { /** * 选房 */ public void selecthouse(); /** * 看房 */ public void seehouse(); /** * 入住 */ public void ruzhu(); } class realrole implements actions{ public void selecthouse() { system.out.println("用户自己选房"); } public void seehouse() { system.out.println("用户自己看房"); } public void ruzhu() { system.out.println("用户自己入住"); } } class handler implements invocationhandler{ private realrole realrole ; public handler(realrole realrole) { this.realrole = realrole; } public object invoke(object proxy, method method, object[] args) throws throwable { system.out.println(realrole); system.out.println("中介选房,看房"); method.invoke(realrole, args); return null; } } public class demo { public static void main(string[] args) { realrole realrole = new realrole(); handler handler = new handler(realrole); actions proxy = (actions) proxy.newproxyinstance(classloader.getsystemclassloader(), new class[]{actions.class}, handler); proxy.ruzhu(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: 深入浅析Mybatis的缺陷问题
推荐阅读