0
点赞
收藏
分享

微信扫一扫

java中观察者模式的简单实现

七公子706 2023-09-30 阅读 41

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();

    }
}

举报

相关推荐

0 条评论