一、代理设计模式概述
为另一个对象提供一个替身或占位符,以控制对这个对象的访问
二、特点
- 代理类和委托类具有共同的父类或父接口,这样在任何使用委托类对象的地方都可以使用代理类对象替代。
- 代理类负责请求的预处理、过滤,将请求分配给委托类处理,以及委托类处理完请求的后续处理。
三、优点
低耦合,易扩展,灵活度高
四、缺点
间接访问可能会延迟请求相应,增加工作量
五、代码实例
示例:这里银行是代理类,上交所是委托类,客户不能直接访问委托类,通过代理类访问
/**
* 股票接口
*/
public interface TradeStock {
void byStock(int money);
}
/**
* 上海交易所是委托类
* 只有交易所才能买股票
* 代理类和委托类具有共同的父类或父接口,这样在任何使用委托类对象的地方都可以使用代理类对象替代。
* 代理类负责请求的预处理、过滤,将请求分配给委托类处理,以及委托类处理完请求的后续处理
*
*/
public class ShanghaiExchange implements TradeStock {
@Override
public void byStock(int money) {
System.out.println("上交所:开始买入股票");
System.out.println("交易金额:" + money);
System.out.println("上交所:买入结束");
}
}
/**
* 银行充当代理类
*/
public class Bank implements TradeStock {
//代理类注入委托类
private ShanghaiExchange shanghaiExchange;
/**
* 代理类实现买股票的方法,其实还是让银行买
*/
@Override
public void byStock(int money) {
System.out.println("银行:我替你买股票");
//委托类
shanghaiExchange = new ShanghaiExchange();
shanghaiExchange.byStock(money);
System.out.println("银行:买完了");
}
}
/**
* 客户端
*/
public class Client {
public static void main(String[] args) {
//创建代理类
Bank bank = new Bank();
//代理类买股票
bank.byStock(1000);
}
}
银行:我替你买股票
上交所:开始买入股票
交易金额:1000
上交所:买入结束
银行:买完了