代理设计模式

#2020云栖大会#阿里云海量offer来啦!投简历、赢阿里云限量礼品及阿里云ACA认证免费考试资格!>>> hot3.png

代理设计模式


1 什么是代理设计模式?

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

2 代理例子

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

public class Baby{
public void cry(){
    }   public void hungry(){
} }


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

public class Nanny{    public void lookAfter(){        System.out.println("哄宝宝");    }
    public void feed(){        System.out.println("喂宝宝"); }}

然后保姆任职后

public class Baby{    public void cry(){        new Nanny().lookAfter();    }        public void hungry(){        new Nanny().feed();    }}


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

public class Baby{       Nanny nan = new Nanny();
    public void cry(){        nan.lookAfter(); }      public void hungry(){        nan.feed(); }}


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

3 代理模式设计步骤

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

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

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接口的对象


public class Nanny implements BabyProtacol{     public void lookAfter(){        System.out.println("哄宝宝");    }
    public void feed(){        System.out.println("喂宝宝"); }}


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.触发代理方法




59a8da3980e992480d71e4fe7c29a425fa2.png 8131b42321765a424cf6234454e9cef1a45.jpg

它,

不仅仅是一个码



本文分享自微信公众号 - IT那个小笔记(qq1839646816)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

posted @ 2019-08-30 00:06  木瓜煲鸡脚  阅读(21)  评论(0)    收藏  举报