当前位置: 首页 > 编程笔记 >

Design patterns 观察者/ Java

况胡媚
2023-03-14
本文向大家介绍Design patterns 观察者/ Java,包括了Design patterns 观察者/ Java的使用技巧和注意事项,需要的朋友参考一下

例子

观察者模式允许类的用户预订在此类处理数据等时发生的事件,并在这些事件发生时得到通知。在下面的示例中,我们创建了一个处理类和一个观察者类,如果发现短语长于5个字母,则会在处理短语时得到通知。

该LongWordsObserver接口定义了观察者。实施此接口以便向事件注册观察者。

// 可以注册并接收通知的观察值
public interface LongWordsObserver {
    void notify(WordEvent event);
}

该WordEvent班是一旦发生特定事件时,将被发送到观察者的类事件(在这种情况下,发现长字)

// 一个事件类,其中包含找到的长字
public class WordEvent {

    private String word;

    public WordEvent(String word) {
       this.word= word;
    }

    public String getWord() {
        return word;
    }
}

该PhraseProcessor班是处理给定词的类。它允许观察者使用该addObserver方法进行注册。一旦找到长单词,将使用WordEvent该类的实例调用这些观察者。

import java.util.ArrayList;
import java.util.List;

public class PhraseProcessor {

    // 观察员名单
    private List<LongWordsObserver> observers = new ArrayList<>();

    // 注册观察员
    public void addObserver(LongWordsObserver observer) {
        observers.add(observer);
    }

    // 告知所有观察者,发现了一个长字
    private void informObservers(String word) {
        observers.forEach(o -> o.notify(new WordEvent(word)));
    }

    //主要方法-处理一个短语并寻找长单词。如果发现这样,
    // 通知所有观察员
    public void process(String phrase) {
        for (String word : phrase.split(" ")) {
            if (word.length() > 5) {
                informObservers(word);
            }
        }
    }
}

该LongWordsExample级显示如何注册观察员,调用process方法和接收警报时,发现长的单词。

import java.util.ArrayList;
import java.util.List;

public class LongWordsExample {

    public static void main(String[] args) {

        // 创建找到长单词时要填充的单词列表
        List<String> longWords = new ArrayList<>();

        // 创建PhraseProcessor类
        PhraseProcessor processor = new PhraseProcessor();

        // 注册观察员 and specify what it should do when it receives events,
        // 即在长字列表中附加长字
        processor.addObserver(event -> longWords.add(event.getWord()));

        // 调用过程方法 
        processor.process("Lorem ipsum dolor sit amet, consectetuer adipiscing elit");

        // 处理完成后显示长单词列表
        System.out.println(String.join(", ", longWords));
        // 主持人,贴心的
    }
}
           

 类似资料:
  • 问题内容: 我一直在阅读Observer模式,以保持UI处于最新状态,但仍然看不到它的用途。即使在我的特定对象中通知了我的MainActivity然后运行update();方法我仍然无法使用Pet对象来获取更新值,因为该对象是在Oncreate中创建的…而我只是无法创建新对象,因为那时变量会有所不同..这是我的实施,它似乎不起作用。 观察者/ MainActivity 可观察/宠物 问题答案: 首

  • 我们支持使用分布式消息系统,例如 etcd 来保持多个Casbin执行器实例之间的一致性。 因此,我们的用户可以同时使用多个Casbin 执行器来处理大量的权限检查请求。 与策略存储 adapters类似,我们没有把watcher的代码放在主库中。 任何对新消息系统的支持都应该作为watcher程序来实现。 完整的Casbin watchers列表如下所示。 欢迎任何第三方对 watcher 进行

  • ORM类底层提供了Observer支持,可以在数据更新、删除、插入时通知观察者。 $user1 = Model('User')->get(1); $user1->attach(new \App\Observer\UserUpdate()); $user->mobile = '18948735886'; $user->save(); 观察者类 namespace App\Observer; cl

  • 什么是观察者? - 观察者是由 Observable 发送的值的消费者。观察者只是一组回调函数的集合,每个回调函数对应一种 Observable 发送的通知类型:next、error 和 complete 。下面的示例是一个典型的观察者对象: var observer = { next: x => console.log('Observer got a next value: ' + x),

  • 是否有一种设计模式可以形成一个“复合”观察者/可观察者? 我的意思是我有一个可观察的,它在某个变化时通知它的监听器。 每个监听器也是一个可观察的,并通知它自己的监听器(在某个动作上,它做了哪个动作是由第一个可观察的通知触发的)。 这种观察者/可观察的“链接”作为设计是可以的,还是有一个标准的模式?

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

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

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