A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yqw_gz_java 中级黑马   /  2019-4-4 21:41  /  876 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yqw_gz_java 于 2019-4-4 21:44 编辑

1. 被观察者Subject对象
首先是一个Subject类的父类,它实现了维护装有观察者引用集合的功能。
[AppleScript] 纯文本查看 复制代码
public class Subject {
    //保存注册的观察者对象
    private List<Observer> mObervers = new ArrayList<>();

    //注册观察者对象
    public void attach(Observer observer) {
        mObervers.add(observer);
        Log.e("SZH", "attach an observer");
    }

    //注销观察者对象
    public void detach(Observer observer) {
        mObervers.remove(observer);
        Log.e("SZH", "detach an observer");
    }

    //通知所有注册的观察者对象
    public void notifyEveryOne(String newState) {
        for (Observer observer : mObervers) {
            observer.update(newState);
        }
    }
}

接着是一个具体的被观察者对象
public class ConcreteSubject extends Subject {
    private String state;

    public String getState() {
        return state;
    }

    public void change(String newState) {
        state = newState;
        Log.e("SZH", "concreteSubject state:" + newState);

        //状态发生改变,通知观察者
        notifyEveryOne(newState);
    }
}



2. 观察者Observer对象
首先是一个接口,抽象出了一个及时更新的方法

[AppleScript] 纯文本查看 复制代码
public interface Observer {
    void update(String newState);
}


接着是几个观察者对象。

[AppleScript] 纯文本查看 复制代码
public class ObserverA implements Observer {

    //观察者状态
    private String observerState;

    @Override
    public void update(String newState) {
        //更新观察者状态,让它与目标状态一致
        observerState = newState;
        Log.e("SZH", "接收到消息:" + newState + ";我是A模块,快来抢吧!!");
    }
}

public class ObserverB implements Observer {
    //观察者状态
    private String observerState;

    @Override
    public void update(String newState) {
        //更新观察者状态,让它与目标状态一致
        observerState = newState;
        Log.e("SZH", "接收到消息:" + newState + ";我是B模块,快来抢吧!!");
    }
}

public class ObserverC implements Observer {
    //观察者状态
    private String observerState;

    @Override
    public void update(String newState) {
        //更新观察者状态,让它与目标状态一致
        observerState = newState;
        Log.e("SZH", "接收到消息:" + newState + ";我是C模块,快来抢吧!!");
    }
}

---------------------
作者:Colin_Mindset
来源:CSDN
原文:https://www.cnblogs.com/carsonzhu/p/5770253.html

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马