美文网首页
观察者设计模式

观察者设计模式

作者: 逆光_初见 | 来源:发表于2022-12-13 11:49 被阅读0次

抽象层 被观察者

package com.xiangxue.rxjavademo.observer_model;
public interface Observable {

    // 关注
    void addObserver(Observer observer);

    // 取消关注
    void removeObserver(Observer observer);

    // 被观察者发出了改变
    void notifyObservers();

    // 微信公众号的服务 编辑部门 发布一条消息
    void pushMessage(String message);
}

被观察者 实现

package com.xiangxue.rxjavademo.observer_model;

import java.util.ArrayList;
import java.util.List;
public class WechatServerObservable implements Observable {

    // 容器 存储 多个  观察者
    private List<Observer> observers = new ArrayList<>();
    private String message;

    @Override
    public void addObserver(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void notifyObservers() {
        // 遍历容器
        for (Observer observer : observers) {
            observer.update(message);
        }
    }

    @Override
    public void pushMessage(String message) {
        this.message = message;
        // System.out.println("微信服务号更新了消息:" + message);

        // 通知所有 关注了 此服务号的 用户
        notifyObservers();
    }
}

抽象层 观察者

package com.xiangxue.rxjavademo.observer_model;
public interface Observer {

    // 被观察者改变了,我这里可以知道
    void update(Object value);

}

观察者 实现

package com.xiangxue.rxjavademo.observer_model;

// 观察者 实现
public class UserPerson implements Observer {

    private String name;
    private String message;

    public UserPerson(String name) {
        this.name = name;
    }

    @Override
    public void update(Object value) {
        this.message = (String) value;

        // 读取消息
        readMessage();
    }

    private void readMessage() {
        System.out.println(name + " 收到了推送消息:" + message);
    }
}

/**

  • TODO 主要是标准观察者模式
  • todo# 使用场景例子
  •  有一个微信公众号服务,不定时发布一些消息,关注公众号就可以收到推送消息,取消关注就收不到推送消息。
    

*/

package com.xiangxue.rxjavademo.observer_model;

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        test();
    }

    public static void test() {
        // 编辑部 编辑好的文案内容
        String msg = "重大消息:以后Android程序员必须要学习Kotlin,必须要学习各种新技术与跨平台的内容啦";

        // 创建一个微信公众号服务(被观察者)
        Observable server = new WechatServerObservable();

        // 创建 用户 (观察者)  多个
        Observer shizhenxiangUser = new UserPerson("史帧湘");
        Observer duzitenUser = new UserPerson("杜子腾");
        Observer daiyuejinUser = new UserPerson("戴悦京");
        Observer liumangUser = new UserPerson("刘芒");

        // 订阅  注意:这里的订阅还是 被观察者.订阅(观察者)  关注
        server.addObserver(shizhenxiangUser);
        server.addObserver(duzitenUser);
        server.addObserver(daiyuejinUser);
        server.addObserver(liumangUser);

        // 微信平台 发生了 改变
        // server.pushMessage(msg);


        // 肚子疼 取消了关注
        System.out.println("============================================");
        server.removeObserver(duzitenUser);

        // 再次微信平台 发生了 改变
        server.pushMessage(msg);
    }
}

相关文章

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • 设计模式02-观察者者设计模式

    [toc] 设计模式02-观察者者设计模式 主要来源Head First设计模式(书)观察者设计模式是JDK中使用...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • RxJava设计模式与原理

    标准观察者设计模式 RxJava是一种特殊的观察者模式,首先我们先来看标准的观察者设计模式。在标准观察者模式中,存...

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • Guava源码分析——EventBus

    EventBus的设计理念是基于观察者模式的,可以参考设计模式(1)—观察者模式先来了解该设计模式。 1、程序示例...

  • Android LifeCycle 源码学习总结

    整体设计 Lifecycle的核心设计模式就是观察者模式。 LifeCycleOwner 是被观察者,Lifecy...

  • PHP设计模式之观察者模式

    PHP设计模式之观察者模式

  • 设计模式 - 观察者模式

    观察者模式的定义 观察者模式简述 MVC是由各种复杂的设计模式组合而成的复合结构,观察者是其中的设计模式之一。视图...

  • 面試小記

    1:设计模式 观察者模式observer observerble,subscribe (订阅) (1)观察者对象 ...

网友评论

      本文标题:观察者设计模式

      本文链接:https://www.haomeiwen.com/subject/kpshqdtx.html