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

23 篇文章 0 订阅
20 篇文章 0 订阅
最近在看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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值