当前位置: 首页 > 知识库问答 >
问题:

Android中的观察者模式与数据同步

段干英杰
2023-03-14
public class Observable {

    public interface Observer {
        void notify(List<Object> results);
    }

    private HandlerThread handlerThread;
    private List<Object> results = new ArrayList<>();
    private final Map<Observer, ObserverWrapper> observers = new HashMap<>();

    private void working() {
        //Critial section...

        //modifying results list...

        synchronized (observers) {
            for (ObserverWrapper wrapper : observers.values()) {
                wrapper.notify(results);
            }
        }
    }

    public void register(Observer observer, Handler handler) {
        synchronized (observers) {
            //Create observer wrapper and add to map here...
        }
    }

    public void unregister(Observer observer) {
        synchronized (observers) {
            //Remove observer from the map...
        }
    }

    private static final class ObserverWrapper {
       private final Observer observer;
       private final Handler handler;

       public ObserverWrapper(Observer observer, Handler handler) {
           this.observer = observer;
           this.handler = handler;
       }

       public void notify(final List<Object> results) {
           //The observable thread

           handler.post(new Runnable() {
               void run() {
                   //The observer thread
                   //Critical section...
                   observer.notify(results);
               }
           });
       }
    }
}

共有1个答案

禹昊穹
2023-03-14

我可以想到三个选择:

>

  • 使用results对象作为监视器。这需要最少的更改,但这不是很干净,因为对象本身没有说明要成为监视器。b)考虑到更新每隔几毫秒就来一次,人们担心观察者线程会在更长的时间内锁定生产者线程。生产者和观察者都必须:

    同步(结果){

    私有最终对象锁=new Object();

    已同步(锁定){//更新结果}

    ...已同步(锁定){//读取结果}

  •  类似资料:
    • 我想知道用模板observer配置的observer模式是否比常规observer模式更方便。模板观察者的概念是一个可观察的类,它具有配置为模板的特定观察者类型。作为一个例子,我将展示一个普通的观察者,并将其与模板观察者进行比较。 正常观察者模式 正常观察者界面: 对于实现NormalObserver接口的每个类,更新函数都是相同的。如果要实现特定的观察者,例如具有不同更新参数的观察者,这会导致问

    • 主要内容:介绍,实现,Subject.java,Observer.java,BinaryObserver.java,OctalObserver.java,HexaObserver.java,ObserverPatternDemo.java当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。 介绍 意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知

    • 观察者模式 亦称: 事件订阅者、监听者、Event-Subscriber、Listener、Observer 意图 观察者模式是一种行为设计模式, 允许你定义一种订阅机制, 可在对象事件发生时通知多个 “观察” 该对象的其他对象。 问题 假如你有两种类型的对象: ​ 顾客和 商店 。 顾客对某个特定品牌的产品非常感兴趣 (例如最新型号的 iPhone 手机), 而该产品很快将会在商店里出售。 顾客

    • 一、定义 观察者模式(发布-订阅模式):其定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。 在JavaScript中,一般使用事件模型来替代传统的观察者模式。 好处: (1)可广泛应用于异步编程中,是一种替代传递回调函数的方案。 (2)可取代对象之间硬编码的通知机制,一个对象不用再显示地调用另外一个对象的某个接口。两对象轻松解耦。 二、DOM事件–观察者

    • 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 介绍 意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。 何时使用:一个对象(目标对象)

    • 观察者模式是软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实时事件处理系统。 定义一个目标构造函数,并实现绑定、解绑和触发等方法: function Subject() { this.events = {}; this.count = 0; }​ Subj