代理模式介绍
代理模式也称为委托模式,是本书结构型设计模式所讲的第一个模式,其重要性不言而喻,相信在学过本章的内容后会发现不少设计模式中都有代理模式的影子。那么何谓代理呢?其实代理在我门生活中无处不再,对于程序员莫过于代理上网了,连接代理服务器可以上网冲浪,叫公司的同事帮忙买饭也是一种代理,如果遇到公司老板欠工资不发,可以请律师帮忙打官司。
代理模式的定义
为其他对象提供一种代理以控制对这个对象的访问。
代理模式的使用场景
当无法或不想直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。
代理模式的UML类图
代理模式角色:
- 抽象对象角色:声明了目标对象和代理对象的共同接口
- 目标对象角色:定义了代理对象所代表的目标对象
- 代理对象角色:代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象。
代码示例:
抽象对象角色
public abstract class AbstractObject {
public abstract void operation();
}
目标对象角色
public class RealObject extends AbstractObject {
@Override
public void operation() {
System.out.println("一些操作");
}
}
代理对象角色
public class ProxyObject extends AbstractObject {
RealObject realObject = new RealObject();
@Override
public void operation() {
System.out.println("before");
realObject.operation();
System.out.println("after");
}
}
客户端
public class Client {
public static void main(String[] args) {
AbstractObject obj = new ProxyObject();
obj.operation();
}
}
结果:
before
一些操作
after
代理模式很简单易用,在客户端申明代理对象,调用方法操作,就可以了。至于客户对象要实现的代理模块,在代理角色对象里面实现。
总结
代理模式应用广泛,生活中几乎处处都有代理服务。代理模式几乎没有什么缺点,它细分化至很小的一种模式,要说缺点就是对类的增加,这是通病。