观察者模式又称为发布/订阅(Publish/Subscribe)模式,因此我们可以用QQ群说明:
群主@全体成员,只要狗群主@了全体成员你就会收到一条信息,这样可以理解为:狗群主 被观察者对象,群员 观察者对象。他俩的关系就是一对多的关系。MQ主要的设计模式就是观察者模式
手写观察者:
package com.example.demo; //被观察者 public interface Subject { //添加观察者 void addService(Object obj); //删除观察者 void disService(Object obj); //通知所有观察者 void notifyObserver(); }
package com.example.demo; //观察者 public interface ObServce { //当主题状态改变时,会将一个String类型字符传入该方法的参数,每个观察者都需要实现该方法 void update(String info); }
package com.example.demo; import java.util.ArrayList; import java.util.List; //被观察者实现 public class TeacherSubject implements Subject { //储存观察者 private List list=new ArrayList<>(); //修改状态 private String info; @Override public void addService(Object obj) { list.add(obj); } @Override public void disService(Object obj) { list.remove(obj); } @Override public void notifyObserver() { for(int i=0;i<list.size();i++){ StudentObServce o =(StudentObServce)list.get(i); o.update(info); } } public void setTest(String info){ this.info=info; System.out.println("狗群主发出信息:"+info); this.notifyObserver(); } }
package com.example.demo; import java.util.Observable; import java.util.Observer; //观察者的实现类 public class StudentObServce implements ObServce { private String name; private TeacherSubject teacherSubject; public StudentObServce(String name,TeacherSubject teacherSubject){ this.name=name; this.teacherSubject=teacherSubject; teacherSubject.addService(this); } @Override public void update(String info) { System.out.println(name+"群员收到了信息:"+info); } }
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; public class DemoApplication { public static void main(String[] args) { //System.out.println("你好"); TeacherSubject t=new TeacherSubject(); StudentObServce zhangsan=new StudentObServce("张三",t); StudentObServce lisi=new StudentObServce("李四",t); StudentObServce wangwu=new StudentObServce("王五",t); t.setTest("测试1"); t.setTest("测试2"); t.setTest("测试3"); } }
狗群主发出信息:测试1
张三群员收到了信息:测试1
李四群员收到了信息:测试1
王五群员收到了信息:测试1
狗群主发出信息:测试2
张三群员收到了信息:测试2
李四群员收到了信息:测试2
王五群员收到了信息:测试2
狗群主发出信息:测试3
张三群员收到了信息:测试3
李四群员收到了信息:测试3
王五群员收到了信息:测试3