Java设计模式 - 代理模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yaorongke/article/details/82999569

1.定义

代理模式,给目标对象提供一个代理对象,由代理对象控制对目标对象的引用,类似于生活中的中介。

2.作用

有些情况下,客户端类不能直接引用目标对象,这时可以通过代理对象间接访问目标对象。

3.模式角色

  • 抽象对象:声明真实对象需要让代理对象帮忙做的事;
  • 代理对象:通过代理类创建真实对象实例并访问其方法;
  • 真实对象:即目标对象。

4.实现方法

a. 创建抽象对象。

/**
 * 代理模式 - 抽象对象接口, 声明真实对象需要让代理对象帮忙做的事
 *
 * @author rkyao
 * @date 2018/9/11
 */
public interface AbstractObject {

    void doSomething();

}

b. 创建真实对象类。

/**
 * 代理模式 - 真实对象类
 *
 * @author rkyao
 * @date 2018/9/11
 */
public class RealObject implements AbstractObject {

    @Override
    public void doSomething() {
        System.out.println("do something.");
    }

}

c. 创建代理对象类。

/**
 * 代理模式 - 代理对象类, 通过代理类创建真实对象实例并访问其方法
 *
 * @author rkyao
 * @date 2018/9/11
 */
public class ProxyObject implements AbstractObject {

    @Override
    public void doSomething() {
        // 引用并创建真实对象实例
        RealObject realObject = new RealObject();

        // 调用真实对象的方法
        realObject.doSomething();

        // 代理对象额外做的事情
        this.other();
    }

    public void other() {
        System.out.println("do something else.");
    }

}

代理模式通过上面a、b、c三步已实现完成,下面演示一下如何使用:

/**
 * 代理模式 - 测试类
 *
 * @author rkyao
 * @date 2018/9/11
 */
public class ProxyTest {

    public static void main(String[] args) {
        AbstractObject proxy = new ProxyObject();
        proxy.doSomething();
    }

}

代理模式缺陷:客户端和目标对象之间增加了代理对象,会造成系统处理速度变慢;有时候代理模式的实现会比较复杂,增加了系统的复杂性。

猜你喜欢

转载自blog.csdn.net/yaorongke/article/details/82999569
今日推荐