专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java-代理模式的理解(java编写代理服务)

temp10 2024-10-24 17:22:16 java教程 11 ℃ 0 评论
  • 引言

设计模式是语言的表达方式,它能让语言轻便而富有内涵、易读却功能强大。代理模式在Java中十分常见,有为扩展某些类的功能而使用静态代理,也有如Spring实现AOP而使用动态代理,更有RPC实现中使用的调用端调用的代理服务。代理模型除了是一种设计模式之外,它更是一种思维,所以探讨并深入理解这种模型是非常有必要的。

  • 代理模式拳谱总纲

代理模式这种设计模式是一种使用代理对象来执行目标对象的方法并在代理对象中增强目标对象方法的一种设计模式。代理对象代为执行目标对象的方法,并在此基础上进行相应的扩展。看起来是有点拗口,首先介绍一个原则:开闭原则(对扩展开放,对修改关闭)。一种好的设计模式甚至是架构,都是在不修改原有形态的基础上扩展出新的功能。

Java-代理模式的理解(java编写代理服务)

代理模式的元素是:共同接口、代理对象、目标对象。

代理模式的行为:由代理对象执行目标对象的方法、由代理对象扩展目标对象的方法。

代理模式的宏观特性:对客户端只暴露出接口,不暴露它以下的架构。

代理模式的微观特性:每个元由三个类构成,如图。

代理模式的种类:静态代理、动态代理(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有独特的反射技术,可以实现动态代理。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表