代理模式(三)

97 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情

上一篇文章我们介绍了代理模式的实现步骤,这篇文章我们会寻找一个实际场景来应用代理模式,读者可以根据这个例子对代理模式有一个更直观的了解。

应用举例

现在我们假设一个买房的场景,房主因为日常有工作,接触不到合适的有购房需求的人,这个时候就需要中介出场了。中介的存在,其实就相当于房主的代理,我们现在就使用这个场景来对代理模式做介绍。

首先我们定义一个买房接口:

public interface BuyHouse {
    void buyHouse();
}

然后我们定义买房实现类:

public class BuyHouseImpl implements BuyHouse {
    @Override
    public void buyHouse() {
        System.out.println("买房子,办手续,完成交接");
    }
}

接着我们定义代理类:

  1. 这个代理类实现了买房接口(抽象角色)
  2. 代理类中有一个具体角色的成员变量
  3. 覆写买房接口中的方法,同时在调用具体角色的前后新增一些附加逻辑
public class Proxy implements BuyHouse {

    private BuyHouse buyHouseImpl;

    public Proxy(BuyHouse buyHouse){
        buyHouseImpl = buyHouse;
    }

    @Override
    public void buyHouse() {
        System.out.println("中介开始服务");
        buyHouseImpl.buyHouse();
        System.out.println("中介完成服务");
    }
}

最后我们通过代理类完成调用,代码如下:

public static void main(String[] args) {   
    // 定义买房实际角色
    BuyHouse BuyHouse = new BuyHouseImpl();
    // 定义代理类
    Proxy proxy = new Proxy(BuyHouse);
    // 通过代理类完成买房
    proxy.buyHouse();
}

上述代码运行后,会输出:

中介开始服务
买房子,办手续,完成交接
中介完成服务

总结

通过上述举例,我们可以很清晰地在脑海中绘制出代理模式的运行流程图。然后结合之前的两篇关于代理模式介绍的文,我们肯定会有更加直观而深刻的理解。

但是这篇文章的举例仅仅是“静态代理”的一种体现,然后更高级的玩法还得是“动态代理”,下一篇文章我们来讲动态代理的使用方式。