代理模式的一种常见的实现方案是,定义一个接口或抽象类,并派生出目标子类(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组件开发增加了强大的生命力,
分享到:
相关推荐
1. **定义接口**:首先定义一个公共接口,接口中声明了目标对象需要实现的方法。 2. **实现目标类**:创建一个实现了接口的目标类,该类完成实际业务逻辑。 3. **创建代理类**:创建一个代理类,同样实现接口,代理...
抽象主题角色定义了公共接口,真实主题角色实现了这些接口的实际业务逻辑,而代理主题角色则实现相同接口,并持有真实主题的引用,用于在调用真实主题之前或之后执行额外的操作。 动态代理则是Java在JDK 1.3之后...
总的来说,Java 代理模式是通过代理类来增强或扩展目标类功能的一种设计模式,尤其适用于需要在调用前后添加额外逻辑的场景。通过深入理解代理模式和其在房屋买卖场景中的应用,我们可以更好地掌握这一重要的设计...
在Java中,动态代理是代理模式的一种实现方式,它允许我们在运行时创建代理对象,这种方式比静态代理更加灵活。动态代理在JDK 1.3及以后的版本中得到了支持,主要涉及到三个核心类:`Proxy`、`InvocationHandler`和`...
工厂模式则通过一个公共接口创建对象,使得代码更易于扩展和维护。观察者模式(Observer)让多个对象能够监听并响应某个对象的状态变化,这是事件驱动编程的基础。 "Java与模式"资料可能涵盖了23种GOF(GoF,Gang ...
1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,通过一个公共接口来生产不同类型的实例,而不是直接创建它们。在Java中,你可以定义一个接口或抽象类作为工厂接口,然后为每种...
Java中的`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口可以实现动态代理。动态代理在Android中常用于实现事件监听、AOP(面向切面编程)等场景。 **Android中的应用** 1. **数据加载**...
Java中,可以通过定义访问者接口和元素接口实现。 16. **备忘录模式**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。Java中的`Serializable`接口可用于实现对象的序列化,达到...
静态代理模式的核心思想是通过代理类来代理原始对象(也称为真实对象或服务对象),代理类通常与原始对象实现相同的接口,以便在客户端代码中可以透明地调用。代理类可以在调用真实对象的方法前后添加额外的操作,...
动态代理是Java特有的,通过java.lang.reflect包下的Proxy类和InvocationHandler接口实现,可以在运行时动态生成代理对象。 策略模式是一种行为型模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相...
1. **定义接口**:首先,我们需要定义一个公共接口,该接口描述了真实对象和代理对象需要共同实现的行为。 ```java public interface Service { void execute(); } ``` 2. **创建真实对象**:接着,创建一个实现了...
- 工厂模式(Factory):工厂模式是一种最基础的创建型模式,它提供了一种创建对象的最佳方式,通过一个公共接口来封装一系列的对象创建过程,使客户端无需关心对象的创建细节。 - 原型模式(Prototype):原型...
在这个“java代理实例”中,我们将会深入探讨Java动态代理(Dynamic Proxy)以及静态代理(Static Proxy)的概念,这两种方法都是实现代理模式的关键。 一、Java动态代理 动态代理是Java内置的机制,主要依赖于`...
1. **定义接口**:定义一个公共接口,所有参与代理的类都必须实现这个接口。 2. **实现接口**:创建实现该接口的具体类。 3. **实现InvocationHandler**:创建一个实现了`InvocationHandler`接口的类,并重写`invoke...
代理模式是一种常用的设计模式,它在软件开发中起到了中介或者代表的作用,允许我们通过一个对象来控制对另一个对象的访问。在Java和Spring框架中,动态代理更是扮演着重要角色,尤其是在实现面向切面编程(AOP)时...
* 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法调用 * * 作用 * 1.保护被代理对象 * 2.增强被代理对象 * 3.完全...
例如,Java的枚举类型可以方便地实现单例模式,而动态代理则可以简化代理模式的实现。 通过阅读《设计模式-Java语言中的应用》,读者不仅可以掌握设计模式的基本概念和原理,还能学习到如何在实际项目中选择合适的...
代理模式通过创建一个对象来控制对另一个对象的访问,它属于结构型设计模式之一。 #### 二、代理模式分类 代理模式主要分为两大类:静态代理和动态代理。 1. **静态代理**: - **定义**:静态代理由程序员创建或...