网站首页 > java教程 正文
- 引言
设计模式是语言的表达方式,它能让语言轻便而富有内涵、易读却功能强大。代理模式在Java中十分常见,有为扩展某些类的功能而使用静态代理,也有如Spring实现AOP而使用动态代理,更有RPC实现中使用的调用端调用的代理服务。代理模型除了是一种设计模式之外,它更是一种思维,所以探讨并深入理解这种模型是非常有必要的。
- 代理模式拳谱总纲
代理模式这种设计模式是一种使用代理对象来执行目标对象的方法并在代理对象中增强目标对象方法的一种设计模式。代理对象代为执行目标对象的方法,并在此基础上进行相应的扩展。看起来是有点拗口,首先介绍一个原则:开闭原则(对扩展开放,对修改关闭)。一种好的设计模式甚至是架构,都是在不修改原有形态的基础上扩展出新的功能。
代理模式的元素是:共同接口、代理对象、目标对象。
代理模式的行为:由代理对象执行目标对象的方法、由代理对象扩展目标对象的方法。
代理模式的宏观特性:对客户端只暴露出接口,不暴露它以下的架构。
代理模式的微观特性:每个元由三个类构成,如图。
代理模式的种类:静态代理、动态代理(jdk动态代理、cglib动态代理、Spring和AspectJ实现的动态代理)
- 静态代理
静态代理模式就是如上图所示,构造三个类实现他们的关系。
首先会思考的一点就是为什么需要实现同一个接口,如果不实现同一个接口,一样可以“代理”功能,所以为什么非要实现同一个接口。我个人认为不实现统一接口的话代理方法有可能会不能完全实现(因为实现接口必须实现它的抽象方法),其次就是方法名称了,已经由接口定义的方法就是目标对象实现了的功能,也算是一种提醒,最后我能想到的就是不实现统一接口的话应该叫做聚合而不是代理。
package Proxy.Static; public interface DAOInterface { public void add(); public void delete(); public void update(); public void query(); }
package Proxy.Static; public class UserDao implements DAOInterface{ @Override public void add() { System.out.println("在目标对象中执行add"); } @Override public void delete() { System.out.println("在目标对象中执行delete"); } @Override public void update() { System.out.println("在目标对象中执行update"); } @Override public void query() { System.out.println("在目标对象中执行query"); } }
package Proxy.Static; /** * 代理对象 * @author ctk * */ public class UserDaoProxy implements DAOInterface{ UserDao userDao = null; public UserDaoProxy(UserDao userDao){ this.userDao = userDao; } @Override public void add() { userDao.add(); System.out.println("记录日志add"); } @Override public void delete() { userDao.delete(); System.out.println("记录日志delete"); } @Override public void update() { userDao.update(); System.out.println("记录日志update"); } @Override public void query() { userDao.query(); System.out.println("记录日志query"); } }
静态代理就是写死了在代理对象中执行这个方法前后执行添加功能的形式,每次要在接口中添加一个新方法,则需要在目标对象中实现这个方法,并且在代理对象中实现相应的代理方法,幸而Java有独特的反射技术,可以实现动态代理。
猜你喜欢
- 2024-10-24 Java动态代理与静态代理以及它能为我们做什么
- 2024-10-24 Java 设计模式 之 代理模式 (1)(java设计模式之代理模式)
- 2024-10-24 Java设计模式:代理模式 vs. 装饰模式
- 2024-10-24 设计模式篇——代理模式详解(面试再问你代理模式,这么回答他)
- 2024-10-24 动态代理大揭秘,带你彻底弄清楚动态代理
- 2024-10-24 面试:Java的代理模式动态代理和静态代理区别,aop用的什么代理
- 2024-10-24 Java设计模式之代理模式(java代理类是什么)
- 2024-10-24 JAVA设计模式——代理模式(java编写代理服务)
- 2024-10-24 23种java设计模式之:门面模式、享元模式、代理模式
- 2024-10-24 Java 17中的动态代理:实现灵活的代理模式
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)