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

来源:互联网 发布:盘锦市大数据管理中心 编辑:程序博客网 时间:2024/05/16 13:00

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

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

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

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

*** 更好的服务: 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分钟搞定,而且还能积分。

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

原创粉丝点击