代理的理解-以日常生活为例
主体需要客体提供的服务时,代替客体实际提供服务的第三方。
举个例子
场景:小明在家楼下的便利店买一瓶可口可乐公司生产的雪碧。
主体:小明
客体:可口可乐公司
服务:卖雪碧
代理:便利店
在我们举例的这个场景中,主体之所以需要向作为客体的便利店来买雪碧,而不是直接从可口可乐公司买,提炼原因:
*** 更好的服务:
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分钟搞定,而且还能积分。
通过相对于客体可口可乐公司,便利店这个代理,确实是给主体提供了更好的服务。