文章目录

  • 一、简单理解观察者模式
  • 二、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目前在线

总结

在观察者模式中,有一个有所有观察者的容器集合,在被观察者状态变化时,修改状态的方法后跟着 状态变化后需要执行的功能方法,所有观察者的集合需要执行