Java的代理模式(通过公共接口实现)

代理模式的一种常见的实现方案是,定义一个接口或抽象类,并派生出目标子类(RealClass ),和代理子类(ProxyClass )。我们要操作的是目标子类里的方法,而很多时候,我们需要为目标子类中的方法增加额外的处理,如果增加日志功能、条件判断等,这时候,就很有必要用到代理类。

/**
 * 代理子类和目标子类的公共接口
 * @author  *
 */
public interface MyInterface {
    
    public void doOperation();

}

 

/**
 * 目标子类
 * @author 111 */
public class RealClass implements MyInterface {

    /**
     * 我们要执行的目标方法
     */
    @Override
    public void doOperation() {
        System.out.println("doOperation");
    }

}

 而在没有使用代理模式的情况下,我们是这样执行目标方法的:

 RealClass realObj = new RealClass();
 realObj.doOperation();    //调用目标方法

 打印时输出:

doOperation

 

而我们要加入额外的处理的话,就可以使用代理类了:

/**
 * 代理子类
 * @author  *
 */
public class ProxyClass implements MyInterface {

    private MyInterface realObj;    //目标子类对象
    
    public ProxyClass(MyInterface realObj) {
        this.realObj = realObj;
    }
    
    /**
     * 调用目标子类的方法,并在其中加入了前置处理和后置处理
     */
    @Override
    public void doOperation() {
        doBefore();
        realObj.doOperation();
        doAfter();
    }
    
    /**
     * 目标方法调用前的相关处理
     */
    private void doBefore() {
        System.out.println("doBefore");
    }
    
    /**
     * 目标方法调用后的相关处理
     */
    private void doAfter() {
        System.out.println("doAfter");
    }

}

 

有了代理类,我们可以这样执行目标方法:

 ProxyClass proxyObj = new ProxyClass(new RealClass());
 proxyObj.doOperation();    //通过代理对象调用doOperation方法

 

打印时输出:

doBefore
doOperation
doAfter

 

本文只是代理模式的在Java中的简单使用,而代理模式与Java反射机制的整合,为Java组件开发增加了强大的生命力,

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代理模式是一种常用的设计模式,其主要作用是为其他对象提供一种代理以控制对这个对象的访问。代理模式Java 中可以通过接口实现,也可以通过继承实现。下面分别介绍这两种实现方式。 1. 接口实现代理模式 接口实现代理模式需要定义一个接口和一个代理类,代理实现接口并持有一个接口的引用,通过代理类来间接访问目标对象。 示例代码如下: ```java // 定义接口 public interface Subject { void doSomething(); } // 目标对象 public class RealSubject implements Subject { @Override public void doSomething() { System.out.println("RealSubject do something"); } } // 代理类 public class Proxy implements Subject { private RealSubject realSubject; public Proxy(RealSubject realSubject) { this.realSubject = realSubject; } @Override public void doSomething() { System.out.println("Before realSubject do something"); realSubject.doSomething(); System.out.println("After realSubject do something"); } } // 测试 public class Test { public static void main(String[] args) { RealSubject realSubject = new RealSubject(); Proxy proxy = new Proxy(realSubject); proxy.doSomething(); } } ``` 运行结果: ``` Before realSubject do something RealSubject do something After realSubject do something ``` 2. 继承实现代理模式 继承实现代理模式需要定义一个目标对象和一个代理对象,代理对象继承目标对象并重写目标对象的方法,在方法中间接访问目标对象。 示例代码如下: ```java // 目标对象 public class RealSubject { public void doSomething() { System.out.println("RealSubject do something"); } } // 代理对象 public class Proxy extends RealSubject { @Override public void doSomething() { System.out.println("Before realSubject do something"); super.doSomething(); System.out.println("After realSubject do something"); } } // 测试 public class Test { public static void main(String[] args) { Proxy proxy = new Proxy(); proxy.doSomething(); } } ``` 运行结果: ``` Before realSubject do something RealSubject do something After realSubject do something ``` 无论是接口实现还是继承实现代理模式的核心是代理类和目标对象的分离,通过代理类来控制对目标对象的访问,可以在不改变目标对象的情况下增加或修改一些额外的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值