持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
上一篇文章我们介绍了代理模式的实现步骤,这篇文章我们会寻找一个实际场景来应用代理模式,读者可以根据这个例子对代理模式有一个更直观的了解。
应用举例
现在我们假设一个买房的场景,房主因为日常有工作,接触不到合适的有购房需求的人,这个时候就需要中介出场了。中介的存在,其实就相当于房主的代理,我们现在就使用这个场景来对代理模式做介绍。
首先我们定义一个买房接口:
public interface BuyHouse {
void buyHouse();
}
然后我们定义买房实现类:
public class BuyHouseImpl implements BuyHouse {
@Override
public void buyHouse() {
System.out.println("买房子,办手续,完成交接");
}
}
接着我们定义代理类:
- 这个代理类实现了买房接口(抽象角色)
- 代理类中有一个具体角色的成员变量
- 覆写买房接口中的方法,同时在调用具体角色的前后新增一些附加逻辑
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();
}
上述代码运行后,会输出:
中介开始服务
买房子,办手续,完成交接
中介完成服务
总结
通过上述举例,我们可以很清晰地在脑海中绘制出代理模式的运行流程图。然后结合之前的两篇关于代理模式介绍的文,我们肯定会有更加直观而深刻的理解。
但是这篇文章的举例仅仅是“静态代理”的一种体现,然后更高级的玩法还得是“动态代理”,下一篇文章我们来讲动态代理的使用方式。