什么是代理模式?
为其他对象提供一种代理以控制对这个对象的访问。
《大化设计模式》一书中通过为他人做嫁衣一例解释了什么是代理模式。
组成
- 抽象角色:通过接口或抽象类声明真实角色(委托者)实现的业务方法;
- 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并且可以附加自己的操作;
- 真实角色:实现抽象角色,定义真实角色索要实现的业务逻辑。
代理模式的好处?
- 职责清晰,真实角色只需要实现自己的业务逻辑,不用关心其他非本职的事务,通过代理完成后期的任务;
- 代理对象在客户端和目标对象之间起到了中介的作用,保护了目标对象;
- 高扩展性,代理对象可以添加额外的功能
代理模式结构图
代码实现
抽象角色:
public interface Subject(){
void request();
}
真实角色:
public class RealSubject implements Subject{
//定义自己的业务逻辑
public void request(){
System.out.println("真实的请求");
}
}
代理对象:
public class Proxy implements Subject{
private RealSubject realSubject;//代理类中有一个被代理者的引用
//方法内还可以扩展别的功能,如打印日志等等...
public void request(){
realSubject.request();//通过真实角色的方法实现自己的方法
}
}
客户端代码:
public static void main(Stirng[] args){
Proxy proxy = new Proxy();
proxy.reuqest();
}