前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >代理设计模式

代理设计模式

作者头像
木瓜煲鸡脚
发布2019-09-03 12:01:51
2290
发布2019-09-03 12:01:51
举报
文章被收录于专栏:Jasper小笔记

代理设计模式

1

什么是代理设计模式?

当某一个对象发生某一个事件时,通知另一个对象,让另一个对象做某事

2

代理例子

家里有一个宝宝Baby,它有两种行为:"哭"cry和"饿"hungry。

代码语言:javascript
复制
public class Baby{

    public void cry(){

    }  
   public void hungry(){

    }
    
}

当"哭"事件发生时我需要去"照顾"look after,当"饿"发生时我需要去"喂"feed。我可以请一个"保姆"nanny来去做这些事,这就是代理

代码语言:javascript
复制
public class Nanny{
    public void lookAfter(){
        System.out.println("哄宝宝");
    }

    public void feed(){
        System.out.println("喂宝宝");
    }
}

然后保姆任职后

代码语言:javascript
复制
public class Baby{
    public void cry(){
        new Nanny().lookAfter();
    }
    
    public void hungry(){
        new Nanny().feed();
    }
}

但是到这里有个问题:当宝宝一哭就雇用一个保姆去照看,当宝宝一饿又新雇佣。宝宝每次触发都要新雇一个。显然这样是不合理的。

代码语言:javascript
复制
public class Baby{
   
    Nanny nan = new Nanny();

    public void cry(){
        nan.lookAfter();
    }
  
    public void hungry(){
        nan.feed();
    }
}

改成这样之后,都是由定义好的nan这一个对象来监管,而不是每次都新建一个。但是这样还是存在问题,因为这样写死在Baby里面,也就是说每创建一个Baby对象或者说每一个婴儿出生它内部已经定义了保姆已经绑定了,而保姆应该是后来请的,并且是可以换的。下面开始进行代理设计模式

3

代理模式设计步骤

像上面所说保姆是可换的,但也是要满足代理条件的,也就是当保姆的条件,因为并不是什么人都可以

也就是编写一个规范即接口,只有实现了此接口的才能做对应的代理

代码语言:javascript
复制
public interface BabyProtocol{
    
    public void lookAfter();
    public void feed();

}


public class Baby{

    public BabyProtocol nan;

    public void cry(){
        nan.lookAfter();
    }
  
    public void hungry(){
        nan.feed();
    }
}

这时就需要外界去传一个实现了BabyProtocal接口的对象

代码语言:javascript
复制
public class Nanny implements BabyProtacol{
    
 public void lookAfter(){
        System.out.println("哄宝宝");
    }

    public void feed(){
        System.out.println("喂宝宝");
    }
}
代码语言:javascript
复制
public class Test{
    public static void main(String[] args){
        Baby baby = new Baby();
        baby.nan = new Nanny();
        baby.cry();
        baby.hungry();
    }
}

这样那么才是之后给baby设置保姆,并且可以换,但是要是实现了Babyprotocal的类的对象

4

总结

一个对象的的行为让另一个对象来监听,另一个对象就是代理

步骤:

1.定义好协议

2.遵守协议

3.成为代理

4.触发代理方法

它,

不仅仅是一个码

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT那个小笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档