首页 > 其他分享 >设计模式之观察者模式讲解

设计模式之观察者模式讲解

时间:2024-04-08 18:29:05浏览次数:17  
标签:String Observer void 观察者 讲解 设计模式 public observer subject

概念:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。

  • 抽象主题:或者叫被观察者,可以持有、增加、删除观察者对象。
  • 具体主题:实现抽象主题定义的操作,并定义一个状态,每当状态改变时,通知所有观察者。
  • 抽象观察者:为所有观察者定义抽象操作,如update()方法,用于接收具体主题的状态变化。
  • 具体观察者:具体实现接收到状态变化后的逻辑。

用一个例子帮助大家理解:

public interface Observer {
    void update(String message);
}

public class ConcreteObserver implements Observer {
    private String name;
    public ConcreteObserver(String name) {
        this.name = name;
    }
    @Override
    public void update(String message) {
        System.out.println(name + " 接收到消息: " + message);
    }
}

public interface Subject {
    void registerObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers(String message);
}

public class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();
    private String state;
    @Override
    public void registerObserver(Observer observer) {
        observers.add(observer);
    }
    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }
    @Override
    public void notifyObservers(String message) {
        for (Observer observer : observers) {
            observer.update(message);
        }
    }
    public void setState(String state) {
        this.state = state;
        notifyObservers("状态被更新为: " + state);
    }
    public String getState() {
        return state;
    }
}

public class Demo {
    public static void main(String[] args) {
        ConcreteSubject subject = new ConcreteSubject();
        Observer observer1 = new ConcreteObserver("Observer 1");
        Observer observer2 = new ConcreteObserver("Observer 2");
        subject.registerObserver(observer1);
        subject.registerObserver(observer2);
        subject.setState("Start");
        subject.setState("Processing");
        subject.removeObserver(observer1);
        subject.setState("Stop");
    }
}

如果大家需要视频版本的讲解,欢迎大家关注我的B站:

【天哥不爱学习的个人空间-哔哩哔哩】 https://b23.tv/HxwqjXl

标签:String,Observer,void,观察者,讲解,设计模式,public,observer,subject
From: https://blog.csdn.net/u012151345/article/details/137517186

相关文章

  • 设计模式 - 策略模式
    起初业务简单、随着业务增长所有相关业务代码处理逻辑都放置同一个对象中,通过策略模式以不通分类实现具体业务publicinterfaceIPlanVideoStrategy{Stringexecute(IntegertypeCode,IntegernodeId,List<String>qzTimeList);}publicclassPlanPlayBackContext{......
  • CorelDRAW2024全网最详细独家讲解新版本新功能
    各位粉丝大家好,为了让大家更深入的了解CorelDRAW2024新版的各项新功能,我们独家邀请到了Corel中国专家名师张苏老师,策划并录制30分钟全中文讲解栏目!干货满满,全程演示,一览CorelDRAW2024新版的各项新功能!不容错过!干货!Corel专家团讲师张苏老师详细拆解2024新版功能,带你感受2024......
  • 为大家整理最全的24种设计模式详解,必收藏
    设计模式六大原则 单一职责原则一个方法尽可能做一件事情,一般来说不应该让一个方法承担多个职责。单一职责原则的英文名称是SingleResponsibilityPrinciple,简称是SRP。单一职责原则的定义是:应该有且仅有一个原因引起类的变更。SRP的原话解释是:Thereshouldneverbemo......
  • 浅尝设计模式
    设计模式三大类创建型模式工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式结构型模式适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式行为型模式策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备......
  • 设计模式|责任链模式(Chain of Responsibility Pattern)
    文章目录结构优点缺点使用责任链的步骤示例有哪些知名框架采用了责任链模式责任链模式和链表有什么关联常见面试题责任链模式(ChainofResponsibilityPattern)是一种行为设计模式,它允许你创建一个对象链。请求将沿着这个链传递,直到有一个对象处理它为止。这种模式可以......
  • 设计模式-建造者模式
    1.概念建造者模式(BuilderPattern)又叫生成器模式,是一种创建型设计模式,用于将复杂对象的构建过程与其表示分离,以便相同的构建过程可以创建不同的表示。这种模式特别适用于创建那些具有多个组成部分、步骤复杂或者产品具有多种不同变化的对象。2.原理结构图原理结构图......
  • 设计模式 - 代理模式
    使用代理对象,我们可以对与某些对象的交互进行更多的控制。代理对象可以在我们与对象进行交互时确定其行为,例如,当我们获取值或设置值时。一般来说,代理是指代替他人的人。你不是直接和那个人说话,而是和代表你试图联系的人说话的代理。在JavaScript中也是如此:我们不是直接与目标......
  • C++设计模式:TemplateMethod模式(一)
    1、概念定义定义一个操作中的算法的骨架结构(稳定),而将一些步骤延迟(变化)到子类中。TemplateMethod使得子类可以不改变(复用)一个算法的骨架结构即可重定义(override重写)该算法的某些特定步骤在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但是各个子步骤却有很......
  • Replication Controller、ReplicaSet和Deployment(Kubernetes调度系列,结合操作命令讲解
    目录一、概述二、ReplicationController2.1ReplicationController说明2.2ReplicationController举例三、ReplicaSet3.1ReplicaSet说明3.2ReplicaSet举例四、无状态应用管理Deployment4.1概述4.2创建Deployment4.2.1Deployment标签内容解析4.2.2ku......
  • [转帖]JVM 内存分析工具 MAT 的深度讲解与实践——进阶篇
    https://juejin.cn/post/6911624328472133646  注:本文原创,转发需标明作者及原文链接。欢迎关注 【0广告微信公众号:Q的博客】。本系列共三篇文章, 本文是系列第2篇——进阶篇,详细讲解MAT各种工具的核心功能、用法、适用场景,并在具体实战场景下讲解帮大家学习如何针......