Java中实现代理模式

2017-05-01  本文已影响23人  capo

代理模式

代理是基本的设计模式之一,它是你为了提供额外的或不同的操作,而插入的用来代替实际对象的对象。这些操作通常涉及与“实际”对象的通信,因此代理通常充当这中间人的角色。下面通过代码结构演示一遍

1. 定义一个接口

public interface Interface { void doSomething(); void somethingElse(String arg); }

2. 定义一个实际对象实现这个接口

public class RealObject implements Interface {

    @Override
    public void doSomething() {
        System.out.println("实现---doSomething");
    }

    @Override
    public void somethingElse(String arg) {
        System.out.println("实现---somethingELse");
    }
}

3. 构建一个simpleProxy代理类同时实现了Interface

public class SimpleProxy implements Interface {
    //定义一个接口类型变量强制将变量设置为接口类型
    private Interface proxied;
    public SimpleProxy(Interface proxied) {
        this.proxied = proxied;
    }

    @Override
    public void doSomething() {
       System.out.println("我又实现了---doSomething");
    }

    @Override
    public void somethingElse(String arg) {
        System.out.println("我又实现了---somethingElse");
    }
}

测试使用代理类来调用方法

public class SimpleProxyDemo {
    public static void consumer(Interface iface) {
        iface.doSomething();
        iface.somethingElse("hello world");
    }

    public static void main(String[] args) {
        consumer(new RealObject());
        //将真实对象作为构造参数传入
        consumer(new SimpleProxy(new RealObject()));
    }
}

consumer()接受的Interface,所以它无法知道正在获得的到底是RealObject还是SimpleProxy,因为这两者都实现了Interface。但是SimpleProxy已经被插入到了客户端和RealObject之前,因此它会执行,然后调用RealObject上相同的方法

注:使用代理模式其核心是在代理类中定义一个接口类型的成员变量

参考 Think In Java

上一篇 下一篇

猜你喜欢

热点阅读