美文网首页
观察者模式

观察者模式

作者: 爱我O就直说 | 来源:发表于2020-01-07 15:15 被阅读0次

2020-01-07

先看效果:
    //观察者模式 测试
    private void observerTest() {
        MyObserverble b = new MyObserverble();
        b.addObserver(new UserObserver("张三"));
        b.addObserver(new UserObserver("李四"));
        b.addObserver(new UserObserver("王麻子"));
        b.pushMssage();
        b.pushMssage("自定义消息");
        b.pushMssage(b.list.get(0), "给指定对象发消息");
    }


###输出结果:

被观察者发出消息:默认消息
张三收到消息:默认消息
李四收到消息:默认消息
王麻子收到消息:默认消息
被观察者发出消息:自定义消息
张三收到消息:自定义消息
李四收到消息:自定义消息
王麻子收到消息:自定义消息
被观察者发出消息:给指定对象发消息
张三收到消息:给指定对象发消息

开始写:

观察者:

/**
 * 观察者接口
 */
interface BObserver {

    void update(Object o);

}
/**
 * 具体 观察者
 */
public class UserObserver implements BObserver {
    private String name;

    public UserObserver() {
    }

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

    @Override
    public void update(Object o) {
        System.out.println(this.name + "收到消息:" + o);
    }

    @Override
    public String toString() {
        return "UserObserver{" + "name='" + name + '\'' + '}';
    }

}

被观察者:

/**
 * 被观察者接口
 */
public interface BObserverble {

    BObserverble addObserver(BObserver o);

    BObserverble removeObserver(BObserver o);

    void pushMssage();
}

/**
 * 具体 被观察者
 */
public class MyObserverble implements BObserverble {
    //观察者清单
    List<BObserver> list = new ArrayList<>();

    @Override
    public BObserverble addObserver(BObserver o) {
        list.add(o);
        return this;
    }

    @Override
    public BObserverble removeObserver(BObserver o) {
        list.remove(o);
        return this;
    }

    @Override
    public void pushMssage() {
        pushMssage("默认消息");
    }

    /**
     * 发送消息
     *
     * @param message 发送的消息内容
     */
    public void pushMssage(String message) {
        System.out.println("被观察者发出消息:" + message);
        for (BObserver o : list) {
            o.update(message);
        }
    }

    /**
     * 给指定对象 发送消息
     *
     * @param message 发送的消息内容
     */
    public void pushMssage(BObserver bObserver, String message) {
        System.out.println("被观察者发出消息:" + message);
        for (BObserver o : list) {
            if (o == bObserver) o.update(message);
        }
    }

}

完事儿

相关文章

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

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

  • RxJava基础—观察者模式

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

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • RxJava 原理篇

    一、框架思想 观察者模式观察者自下而上注入被观察者被观察者自上而下发射事件观察者模式 装饰器模式自上而下,被观察者...

  • 观察者模式

    观察者模式概念 观察者模式是对象的行为模式,又叫作发布-订阅(publish/subscrible)模式。 观察者...

  • 设计模式-观察者模式

    观察者模式介绍 观察者模式定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为...

  • 观察者模式

    观察者模式 观察者模式的定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/s...

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

    观察者模式 1、什么是观察者模式 观察者模式有时又被称为发布(publish)-订阅(Subscribe)模式、模...

  • 观察者模式和发布订阅模式区别

    观察者模式 所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。 在观察者模式中,观察者需要...

  • RxJava(二)

    一、观察者模式 1.1、传统的观察者模式 1.2、RxJava 的观察者模式 区别传统的观察者模式是一个 Obse...

网友评论

      本文标题:观察者模式

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