代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。代理模式分为静态代理(所代理的类型是固定的,见下例)和动态代理(可以代理任何类型)
类图:
代码:
publicinterface Subject {
publicvoidrequest();
}
publicclass RealSubjectimplements Subject {
@Override
publicvoid request() {
System.out.println("实际操作");
}
}
publicclass Proxyimplements Subject{
private Subjectsubject;
public Proxy(Subject subject){
this.subject=subject;
}
@Override
publicvoid request() {
System.out.println("操作前检查/日志");
subject.request();
}
}
publicstaticvoid main(String[]args) {
//客户端
Subject sub=new RealSubject();
sub=new Proxy(sub);
sub.request();
}
优点:隐藏了被代理类。
缺点:none
代理模式与适配器,装饰和外观很相似,都是把原有的功能重新包装而成为新的功能。适配器:把功能的接口统一;装饰:提升功能的实现;外观:组合功能;代理:隐藏功能的实现。
四种模式的比较:
|
适配器 |
装饰 |
外观 |
代理 |
外部调用 |
方便 |
麻烦 |
很方便 |
一般 |
扩展性 |
弱 |
强 |
弱 |
一般 |
复杂程度 |
一般 |
复杂 |
简单 |
一般 |