java - 构建 Observer 和 Observable 类

标签 java observer-pattern observable

而不是使用内置类 ObservableObserver我正在尝试自己构建它。

根据我的文档,我认为:

public class Observable{
   private Set<Observer> observingMe=null;
   private boolean amIchanged;

   public void notifyObservers(Object args){
        for(Observer o:observingMe){
            o.update(args);
        }
   }

   public void addObserver(Observer e){
    observingMe.add(e);
   }

}

public class Price implements Observable{
    private int price;
    public void setPrice(int newPrice){
        price=newPrice;
        notifyObservers(price);
    }
}
public interface Observer{
    public void update(Object args);
}

这(简而言之)是 Observable 的正确实现吗?在构建 Observable 类时我还需要考虑什么? 有没有办法自动检测 Observable 实例中的任何变化,或者继承的类必须显式调用notifyObservers?

请不要介意语法或小错误

最佳答案

在您的通知方法中,请考虑调用更新时观察者抛出异常的情况。如果你不处理它,就会阻止其他观察者收到通知。此外,您可能希望在单独的线程中通知每个观察者,因为其中一个观察者可能需要很长时间才能对事件使用react,从而阻止其他观察者提前收到通知。

此外,您永远不会使用 boolean 值 amIChanged,并且无需使用 getter 即可将其保持为私有(private)。否则,您就已经实现了基本原则。

关于java - 构建 Observer 和 Observable 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27757896/

相关文章:

java - 使用嵌入式 jar 混淆 jar

java - 如何在 Spring Webflux Controller 中结合 Flux 和 ResponseEntity

android - 用于数据绑定(bind)的 LiveData 与 ObservableField

javascript - 为什么过滤 observable 订阅的结果会得到与过滤 observable 本身不同的结果

grails - 使用RxJava在Grails 3中将RabbitMQ队列视为可观察到的

Java 数字框架

c# - 使用带有事件的观察者模式添加新闻订阅者

java - 使子类在java中可观察

php - Magento:如何禁用或更改核心观察者方法的工作方式

Java日期计算结果截断小数位