最近在看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块钱
我去派出所报案