1、代理模式概述:
代理模式(Proxy Pattern):给某一个对象提供一个代理,并且由代理对象控制对原对象的引用。《设计模式的艺术》
使用场景:
客户端在使用一个功能时,不希望直接使用其接口,而是希望通过一个代理去完成其功能。类似于现实生活中,人们买、租房时常常会通过中介代理,由中介帮客户相关事项,而且代理常常可以为用户完成一些相关性工作,例如办理手续等。
2、代理模式UML类图:
Subject(抽象主题):定义一系列抽象接口,面向抽象编程;
RealSubject(真实主题):真正实现具体业务的类;
Proxy(代理):用于客户端访问真实主题的中介代理,保持对真实主题的引用,并增加真实主题之外的一些操作;
3、代理模式示例:
项目背景:
小A公司要封装一个移动支付的SDK给客户使用,由于支付系统已经是原有的,为保证开放接口的安全性,以及提高系统的扩展性,于是使用代理模式设计开放接口。
代理模式实现:
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底层实现很多地方都有使用代理模式进行设计。有兴趣可以读一读相关的源码, 感受以下设计模式之美。