设计模式之观察者设计模式

来源:互联网 发布:软件招标网 编辑:程序博客网 时间:2024/05/01 01:18

最近在看RxJava的源码,大家都知道Rxjava是基于响应式编程来设计的,那么怎么才能做到响应式编程? 这里有暗藏着一种设计模式—–观察者设计模式,那么我们今天就来给大家把观察者设计模式给大家好好聊一聊

今天只说观察者设计模式 哈哈
那么简单点说下 什么观察者设计模式 ?

举个例子吧! 前一段时间 朝阳群众不是炒得火热吗? 我们今天举一个朝阳群众抓小偷的例子吧 哈哈
事情是这样的: 一个小偷了一笔钱,然后了就开始炫耀了,这时候正好被路过的一群朝阳群众发现,于是乎这几个朝阳群众就开始抓贼了..事情呢 就这么简单,来 让我们分析一下 这个故事藏着这么几个关键点

1> 观察者,是朝阳群众: 朝阳群众就要做他们的事情了

2> 被观察者 ,是小偷: 小偷喜欢炫耀,于是乎就把朝阳群众给招来了,但是朝阳群众有的感兴趣,有的不感兴趣

好的 基于上面的分析 为了程序的可扩展性,我们的观察者和被观察者的父类我们使用接口,那我们就开始愉快的写代码吧!

package ligang;/** *这是观察者的父类  */public interface Police {//警察类    public void Catch(String str);//抓小偷}***************************分割线*************************************************package ligang;/** * 被观察者的父类 */public interface ThiefParent {    //增加一个朝阳群众    public void addPolice(Police police);    //离开一个朝阳群众    public void removePolice(Police police);    //因为炫耀,朝阳群众要报警了    public void notifyPolice(String str);}***************************分割线*************************************************package ligang;import java.util.ArrayList;import java.util.List;/*** * 被观察者具体实现类 */public class Thief implements  ThiefParent {    private List<Police>list=new ArrayList<Police>();    @Override    public void addPolice(Police police) {            list.add(police);    }    @Override    public void removePolice(Police police) {            list.remove(police);    }    //朝阳群众开始围观 然后报警    @Override    public void notifyPolice(String str) {        for (int i=0;i<list.size();i++){            Police police = list.get(i);            police.Catch(str);        }    }}***************************分割线*************************************************/** * 朝阳群众1 观察者 */public class ChaoYang1 implements Police {    @Override    public void Catch(String str) {        System.out.println(str);        System.out.println("我去报社发消息");    }}/** * 朝阳群众2 观察者 */public class ChaoYang2 implements Police {    @Override    public void Catch(String str) {        System.out.println(str);        System.out.println("我去记者中心发布消息");    }}/** * 朝阳群众3 观察者 */public class ChaoYang3 implements Police {    @Override    public void Catch(String str) {        System.out.println(str);        System.out.println("我去派出所报案");    }}***************************分割线*************************************************package ligang;/** * 测试类 */public class Demo {    public static void main(String[] args) {        Thief thief = new Thief();        //有三名朝阳群众        ChaoYang1 chaoYang1 = new ChaoYang1();        ChaoYang2 chaoYang2 = new ChaoYang2();        ChaoYang3 chaoYang3 = new ChaoYang3();        //小偷引来了三名朝阳群众        thief.addPolice(chaoYang1);        thief.addPolice(chaoYang2);        thief.addPolice(chaoYang3);        //又有一位朝阳群众离开了        thief.removePolice(chaoYang1);        //小偷开始炫耀了        thief.notifyPolice("今天偷了xxx块钱");    }}运行结果:今天偷了xxx块钱我去记者中心发布消息今天偷了xxx块钱我去派出所报案
好了上面的代码便是我们观察者设计模式的详细解释 其中有注释看懂应该是没问题,哈哈 这是我看Rxjava源码的时候遇到第一个坑,接下来再说高级泛型,这个坑我踩到了,我会继续分享的,直到把RxJava源码看完弄明白 come on
0 0