前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >观察者模式

观察者模式

作者头像
gzq大数据
发布2022-05-11 11:42:45
3500
发布2022-05-11 11:42:45
举报
文章被收录于专栏:大数据那些事大数据那些事

观察者模式需要如下几个对象构建出整个框架: 1抽象主题角色:提供了一个用于保存观察者对象的聚集类和增加删除观察者对象的方法,以及通知所有观察者的抽象方法 2具体主题:具体目标类,实现抽象主题的类 3抽象观察者:是一个抽象类接口,包含一个更新自己的抽象方法,更改通知时随时被调用 4具体观察者

具体例子

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


public class client {
    public static void main(String[] args) {
        // 人民日报开通公众号
        WeChatSubscribe peopleDaily = new PeopleDaily();
        //关注订阅
        peopleDaily.add(new ZhangSan());
        peopleDaily.add(new LiSi());
        peopleDaily.sendMessage = "hhh";
        peopleDaily.notifyObserver();
    }
}

// 抽象主题
abstract class WeChatSubscribe {
    // 定义观察者集合
    protected List<AbstractOB> observers = new ArrayList<AbstractOB>();

    public String sendMessage = "";

    // 添加观察者方法
    public void add(AbstractOB observer) {
        observers.add(observer);
    }

    // 移出观察者方法
    public void remove(AbstractOB observer) {
        Iterator<AbstractOB> iterator = observers.iterator();
        while (iterator.hasNext()) {
            AbstractOB next = iterator.next();
            if (next == observer) {
                iterator.remove();
            }
        }
//        observers.remove(observer);
    }

    // 发送消息的行为
    public abstract void notifyObserver();
}

// 抽象观察者
abstract class AbstractOB {
    abstract void response(WeChatSubscribe subscribe);
}

// 具体目标
class PeopleDaily extends WeChatSubscribe {

    @Override
    public void notifyObserver() {
        System.out.println("今天是雨天" + sendMessage);
        for (AbstractOB ob : observers) {
            ob.response(this);
        }
    }
}

// 具体目标2
//class BJ extends WeChatSubscribe{}


//具体观察者1-张三
class ZhangSan extends AbstractOB {
    public void response(WeChatSubscribe subscribe) {
        System.out.println("张三作为具体观察者,听了很伤心");
    }
}

//具体观察者2-李四
class LiSi extends AbstractOB {
    public void response(WeChatSubscribe subscribe) {
        System.out.println("李四作为具体观察者,听了很高兴");
        //取下观察
        System.out.println("当前的订阅人数" + subscribe.observers.size());
        subscribe.remove(this);
        System.out.println("移除后订阅人数" + subscribe.observers.size());
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档