观察者设计模式

2022-12-13  本文已影响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);
    }
}

/**

*/

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);
    }
}

上一篇 下一篇

猜你喜欢

热点阅读