文章目录
- 一、简单理解观察者模式
- 二、DEMO
- 1.创建监听对象 -- (宅男)
- 2.创建被监听对象 -- (女主播)
- 3.测试类
- 总结
一、简单理解观察者模式
观察者模式,常用的监听器运用了这一设计模式,所以又叫监听者模式。顾名思义,就是创建一个被监听的对象或者容器对象,监听这些对象状态的变化。简单来说,就是对象状态(参数)修改后,调用其他业务方法。
二、DEMO
渣渣辉和唐正奎是两个宅男,喜欢一个女妆主播黄翔辉。只要黄翔辉开播,那么渣渣辉和唐正奎会立马刷礼物哄黄翔辉线下约见。在这个故事里,女妆主播黄翔辉是被监听者;渣渣辉和唐正奎是监听者;上线代表着黄翔辉状态的变化被两个宅男监听到了。上线后,渣渣辉和唐正奎刷礼物就是监听后业务实现
1.创建监听对象 – (宅男)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ZhaiNan{
String name;
ZhaiNan(){}
//观察者成员方法
public void gift(String name,String state){
System.out.println("我是"+this.name +",因为"+name+"直播"+state+",我刷礼物线下约见!");
}
}
2.创建被监听对象 – (女主播)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class NvZhuBo{
String name;
String state = "下线"; //默认为离线状态
//关注的宅男
List<ZhaiNan> zhanNanList ;
@Override
public void setState(String state) {
this.state = state;
//只要状态发生变化,通知观察者,数据改变了,刷礼物了
this.tell();
}
//关注
public void follow(ZhaiNan zhaiNan){
this.zhanNanList .add(zhaiNan);
}
//通知方法
public void tell() {
for (ZhaiNan zhaiNan: zhanNanList ) {
zhaiNan.gift(this.name,this.state);
}
}
}
3.测试类
public class test{
public static void main(String[] args) {
//创建两个宅男
ZhaiNan zzh = new ZhaiNan("zzh");
ZhaiNan tzk = new ZhaiNan("tzk");
//创建女主播
NvZhuBo hxh = new NvZhuBo("hxh");
//两个宅男监听了女主播,进入备胎列表
hxh.follow(zzh);
hxh.follow(tzk);
System.out.println(hxh.name+"之前"+s.getState());
//当女主播上线的时候,会被监听到,并且后续做的业务是zzh和tzk刷礼物的操作
hxh.setState("上线");
System.out.println(hxh.name+"目前"+s.getState());
//在setState后会执行gift方法,也可以换成线下约见或其他房法
}
}
执行结果必然是:
hxh之前下线
我是zzh,因为hxh直播上线,我刷礼物线下约见
我是tzk,因为hxh直播上线,我刷礼物线下约见
hxh目前在线
总结
在观察者模式中,有一个有所有观察者的容器集合,在被观察者状态变化时,修改状态的方法后跟着 状态变化后需要执行的功能方法,所有观察者的集合需要执行