设计模式01-代理模式(静态代理)

代理的理解-以日常生活为例

主体需要客体提供的服务时,代替客体实际提供服务的第三方。
举个例子

场景:小明在家楼下的便利店买一瓶可口可乐公司生产的雪碧。
主体:小明
客体:可口可乐公司
服务:卖雪碧

代理:便利店

在我们举例的这个场景中,主体之所以需要向作为客体的便利店来买雪碧,而不是直接从可口可乐公司买,提炼原因:

*** 更好的服务: 
1. 从家楼下的便利店买,能节省享受服务带来的时间成本
2. 便利店买雪碧可能可以积分,满一定积分能兑换礼物

程序中代理模式的使用

还是以买雪碧为例

1. 先定义雪碧类、以及卖雪碧接口

public class XueBi{
}

public interface IXueBiSeller{
    public void sellXueBi();
}

2. 可口可乐公司类实现卖雪碧接口

public class COCA_COLA_Corp implements IXueBiSeller{
    @Override
    public void sellXueBi(){
        System.out.println("花3天买雪碧");
    }
}

3. 便利店实现卖雪碧接口

public class Convenience_Store implements IXueBiSeller{
    private List<XueBi> xueBiStorageList; 
    @Override
    public void sellXueBi(){
        if(xueBiStorageList == null){
            return;
        }
        else if(xueBiStorageList.size()>0){
            System.out.println("花10分钟买雪碧");
            System.out.println("积100分");
        }else{
            //便利店没有存货了才去可口可乐公司买
            new COCA_COLA_Corp().sellXueBi();
        }       
    }

    public void bugXuebi(){
        if(xueBiStorageList==null||xueBiStorageList.size()==0){
            xueBiStorageList=new ArrayList<Xuebi>();
        }else{
            for(int i=0;i<100;i++){
                xueBiStorageList.add(new XueBi());
            }
            System.out.println("买入100瓶雪碧,当前仓库中存量:"+xueBiStorageList.size());
        }
    }
}

4. 客户端

public class Client{
    public static void main(String[]args){
        IXueBiSeller xueBiSeller= new Convenience_Store();
        //提前进好货
        xueBiSeller.bugXuebi();
        xueBiSeller.sellXueBi();
    }
}

总结

当小卖部的仓库中,雪碧还有存货的时候,
买雪碧本来需要三天,现在10分钟搞定,而且还能积分。

通过相对于客体可口可乐公司,便利店这个代理,确实是给主体提供了更好的服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值