代理设计模式
业务需求
雷军想开一个数码小卖部,为以后退休生活做准备,代理各大厂商的手机和电脑,用代理设计模式帮他实现下
Subject 卖手机
RealProject 苹果、华为厂商,核心是卖手机,但是选址不熟悉
Proxy 雷神数码专卖店:代理卖手机,附加选地址,增加广告等
编码实现
抽取公共方法
public interface DigitalSell {
void sell();
}
真实的对象(未被增强的对象)
/**
* 真实对象
* @author cv大魔王
* @version 1.0
* @date 2021/7/13 14:51
*/
public class DigitalSellReal implements DigitalSell{
@Override
public void sell() {
System.out.println("销售华为手机");
}
}
代理增强类
/**
* 代理增强类
* @author cv大魔王
* @version 1.0
* @date 2021/7/13 16:16
*/
public class DigitalSellProxy implements DigitalSell {
private DigitalSell realObj = new DigitalSellReal();
@Override
public void sell() {
makeAddress();
makeAD();
realObj.sell();
}
private void makeAddress(){
System.out.println("一个人流量很高的地址");
}
private void makeAD(){
System.out.println("做广告");
}
}
使用
public static void main(String[] args) {
DigitalSell realObj = new DigitalSellReal();
realObj.sell();
System.out.println("-----------------");
// 代理对象,增强,同样的方法,一模一样的使用方式,增强功能,不需要使用修改代码
DigitalSell proxySell = new DigitalSellProxy();
proxySell.sell();
}
小结
优点
- 可以在访问一个类时做一些控制,或增加功能
- 操作代理类无须修改原本的源代码,符合开闭原则,系统具有较好的灵活性和可扩展性
缺点
- 增加系统复杂性和调用链路