4要素: 1观察者接口2具体的观察者3管理者接口4管理者实现类5调用 1观察者接口包含观察者行为方法 public interface Observer { /** * 当目标类发生变化时所执行的操作 * */ String doSomething();} 2具
4要素: 1观察者接口2具体的观察者3管理者接口4管理者实现类5调用
1观察者接口包含观察者行为方法
public interface Observer {
/**
* 当目标类发生变化时所执行的操作
* */
String doSomething();
}
2具体的观察者
//具体观察者A
@Slf4j
@Component("ObserverA")
public class ObserverA implements Observer {
@Override
public String doSomething() {
log.info("观察者A执行的业务操作");
return "观察者A执行的业务操作";
}
}
//具体观察者B
@Slf4j
@Component("ObserverB")
public class ObserverB implements Observer {
@Override
public String doSomething() {
log.info("观察者B执行的业务操作");
return "观察者B执行的业务操作";
}
}
3管理者接口
public interface Subject {
/* 添加观察者 */
void addGuanchazhe(Observer observer);
/* 通知所有观察者 */
void notifyAllGuanchazhe();
}
4管理者实现类中包含--观察者集合,并对集合可以做增加或者移除操作
@Component
@Slf4j
public class SubjectService implements Subject {
private List<Observer> observerList = new ArrayList<>();
@Override
public void addGuanchazhe(Observer observer) {
observerList.add(observer);
}
@Override
public void notifyAllGuanchazhe() {
log.info("目标状态发生变化,发送通知给所有观察者");
observerList.stream().forEach(a->a.doSomething());
}
}
5调用
@RequestMapping("/guanchazhe")
@RestController
public class GuanchazheController {
@Autowired
Subject subject;
@Autowired
@Resource(name = "ObserverA")
Observer observerA;
@Autowired
@Resource(name = "ObserverB")
Observer observerB;
@GetMapping("/test")
public void test() {
subject.addGuanchazhe(observerA);
subject.addGuanchazhe(observerB);
subject.notifyAllGuanchazhe();
}
}