当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2023-10-10
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();

    }
}
上一篇:优雅的干掉if else,学会了工资立马涨2000
下一篇:没有了
网友评论