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

设计模式——观察者模式

作者: NLper小白 | 来源:发表于2021-12-08 17:26 被阅读0次

观察者模式


观察者模式,又称发布订阅模式,有解耦、异步的特点


1. 定义

当一个对象的状态发生改变时,已经登记的其他对象能够观察到这一改变从而做出自己相对应的改变,通过这种方式来达到减少依赖关系,解耦合的作用。
例子:微信朋友圈,以当前个人作为订阅者,好有作为主题。一个人发了朋友圈,好友看到朋友圈后,可以点赞或者评论。

2. 主要角色

1. Subject(主题):主要由类实现的可观察的接口,通知观察者使用attach方法,以及取消观察的detach方法
2. ConcreteSubject(具体主题):是实现一个主题接口的类,处理观察者的变化
3. Observe(观察者):根据主题中的更改而进行更新

3.代码实现

3.1 主题定义

// 创建一个主题定义,定义添加删除关系以及通知订阅者
interface subject{
    //添加订阅关系
    void attach(Observer observer);
    // 移除订阅关系
    void detach(Observer observer);
    // 通知订阅者
    void  notifyObserves(String message);
}

3.2 主题的具体实现类

class ConcreteSubject implements subject{
    //订阅者容器
    private List<Observer> observers = new ArrayList<Observer>();

    @Override
    public void attach(Observer observer) {
        //添加订阅关系
        observers.add(observer);
    }

    @Override
    public void detach(Observer observer) {
        //移除订阅关系
        observers.remove(observer);
    }

    @Override
    public void notifyObserves(String message) {
        // 订阅通知
        for (Observer observer : observers){
            observer.update(message);
        }
    }
}

3.3 创建一个观察者接口

//创建一个观察者接口
interface Observer{
    // 处理业务逻辑
    void update(String message);
}

3.4 具体的观察者类

//具体的观察者类
class FriendOneObserver implements Observer{

    @Override
    public void update(String message) {
        //模拟处理业务逻辑
        System.out.println("用户1看到了你发的动态"+message);
    }
}
//具体的观察者类
class FriendTwoObserver implements Observer{

    @Override
    public void update(String message) {
        //模拟处理业务逻辑
        System.out.println("用户2看到了你发的动态"+message);
    }
}

3.5 测试类

public class ObserverDesign {
    public static void main(String[] args){
        ConcreteSubject subject = new ConcreteSubject();
        //添加观察者
        subject.attach(new FriendOneObserver());
        FriendTwoObserver twoObserver = new FriendTwoObserver();
        subject.attach(twoObserver);
        System.out.println("");
        //发送第一条朋友圈动态 所有人可见
        subject.notifyObserves("第一条朋友圈动态");
        //发送第二条朋友圈动态 仅用户1可见
        subject.detach(twoObserver);
        subject.notifyObserves("第二条朋友圈动态");

    }
}

相关文章

  • 观察者设计模式

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

  • RxJava基础—观察者模式

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

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

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

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

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

  • RxJava设计模式与原理

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

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • Guava源码分析——EventBus

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

  • 设计模式之观察者模式

    设计模式之观察者模式 本篇是设计模式系列博客的第四篇,本篇主要学习设计模式中的第二个行为型模式---观察者模式。 ...

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

    PHP设计模式之观察者模式

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

网友评论

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

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