- 代理设计模式概述
为另一个对象提供一个替身或占位符,以控制对这个对象的访问(Head First设计模式给出的定义)
特点:
- 代理类和委托类具有共同的父类或父接口,这样在任何使用委托类对象的地方都可以使用代理类对象替代。
- 代理类负责请求的预处理、过滤,将请求分配给委托类处理,以及委托类处理完请求的后续处理。
- 优点
低耦合,易扩展,灵活度高
- 缺点
间接访问可能会延迟请求相应,增加工作量
这里理财经理是代理类,银行是委托类,客户不能直接访问委托类,通过代理类访问
//理财接口
public inteface ManageMoney {
public void financing();
}
//银行
public class TradeStock implents ManageMoney{
private boolean hasExperience;//有经验吗
public TradeStock(){
}
public TradeStock(boolean hasExperience){
this.hasExperience = hasExperience;
}
public void trade(){
if(hasExperience){
System.out.println(“上交所:您可以买股票了”);
}else{
System.out.println(“上交所:请学会股票知识再来买吧”);
}
}
@Override
public void financing(){
trade();
}
}
//理财经理
public class FinancialManager implements ManageMoney{
private TradeStock tradeStock;
public FinancialManager(){}
@Override
public void financing(){
tradeStock = new TradeStock(hasExperience:true);
System.out.println(“理财经理:开始炒股”);
tradeStock.financing();
}
}
最后的测试代码的类图如下所示,其中理财(ManagerMoney)就是目标(Subject);炒股(TradeStock)就是理财的实现类,理财经理(FinancialManager)就是代理,去理财的方法通过代理,更方便地实现了理财。