您的位置:首页 > 其它

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

2017-10-28 13:24 295 查看

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

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

举个例子

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

代理:便利店


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

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

通过相对于客体可口可乐公司,便利店这个代理,确实是给主体提供了更好的服务。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息