java代理模式解析

1、代理模式概述:

代理模式(Proxy Pattern):给某一个对象提供一个代理,并且由代理对象控制对原对象的引用。《设计模式的艺术》

使用场景:

客户端在使用一个功能时,不希望直接使用其接口,而是希望通过一个代理去完成其功能。类似于现实生活中,人们买、租房时常常会通过中介代理,由中介帮客户相关事项,而且代理常常可以为用户完成一些相关性工作,例如办理手续等。

2、代理模式UML类图:

image.png

Subject(抽象主题):定义一系列抽象接口,面向抽象编程;
RealSubject(真实主题):真正实现具体业务的类;
Proxy(代理):用于客户端访问真实主题的中介代理,保持对真实主题的引用,并增加真实主题之外的一些操作;

3、代理模式示例:

项目背景:

小A公司要封装一个移动支付的SDK给客户使用,由于支付系统已经是原有的,为保证开放接口的安全性,以及提高系统的扩展性,于是使用代理模式设计开放接口。

代理模式实现:

image.png

public interface OrderInterface {

    void order(OrderInfo info);
}

public class OrderImpl implements OrderInterface{

    @Override
    public void order(OrderInfo info) {
        veriryInfo();
    }

    private void veriryInfo() {
        //验证
    }
}
public class OrderInfo {

    private float money;

    public float getMoney() {
        return money;
    }

    public void setMoney(float money) {
        this.money = money;
    }
}
public class OrderProxy implements OrderInterface{

    private OrderImpl orderImpl = new OrderImpl();

    private void recordOrder() {
        //record
    }

    @Override
    public void order(OrderInfo info) {
        recordOrder();
        orderImpl.order(info);
        handOrderResult();
    }

    private void handOrderResult() {
        //hand
    }
}

订购支付开发SDK中提供给外部使用的接口只有OrderProxy中定义的相关功能,真正的支付类OrderImpl对于用户端来说是不可见的。用户端不能知道其内部实现,保证安全性。其次,OrderProxy中还可以增加一些与支付无关的逻辑,例如接口调用的记录,调用结果的处理等。

4、优缺点分析:

优点:

1)代理模式实现使用者与真实处理者的分离,降低系统的耦合度;
2)调用接口时,便于扩展一些业务无关的其他操作,不影响愿系统;

缺点:

1)增加类代理角色,性能上比直接使用低;

结束语

代理模式有许多种,java和Andorid底层实现很多地方都有使用代理模式进行设计。有兴趣可以读一读相关的源码, 感受以下设计模式之美。

猜你喜欢

转载自blog.csdn.net/hb_csu/article/details/80575655