GoF23种设计模式之行为型模式之观察者模式

Python设计模式:23种设计模式介绍 设计模式是软件开发中经典的解决问题的方法,包含23种设计模式,它们可以分为三类:创建型模式、结构型模式和行为型模式。 阅读详情
一、概述
        定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
二、适用性
1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面的时候。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。
2.当对一个对象的改变需要同时改变其它对象,而且不知道具体有多少对象需要改变的时候。
3.当一个对象必须通知其它对象,而它又不能假定其它对象是谁的时候。
三、参与者
1.Subject(目标):目标知道它的观察者。可以有任意多个观察者观察同一个目标。提供注册和删除观察者对象的接口。
2.Observer(观察者):为那些在目标发生改变时需要获得通知的对象定义一个更新接口。
3.ConcreteSubject(具体目标):将有关状态存入各ConcreteObserver对象。当它的状态发生改变时,向它的各个观察者发出通知。
4.ConcreteObserver(具体观察者):维护一个指向ConcreteSubject对象的引用。存储有关状态,这些状态应与目标的状态保持一致。实现Observer的更新接口以使自身状态与目标的状态保持一致。

四、类图

五、示例

Subject

package cn.lynn.observer;

import java.util.ArrayList;
import java.util.List;

public abstract class Citizen {

    protected List<Policeman> polices;

    private String action = "normal";

    public String getAction() {
        return action;
    }

    public void setAction(String action) {
        this.action = action;
    }

    public void setPolices() {
        polices = new ArrayList<Policeman>();
    }

    public void register(Policeman police) {
        polices.add(police);
    }

    public void unregister(Policeman police) {
        polices.remove(police);
    }

    public abstract void notify(String action);
}
Observer
package cn.lynn.observer;

public interface Policeman {

    public void setOut(Citizen citizen);

}
ConcreteSubject
package cn.lynn.observer;

public class DongHuCitizen extends Citizen {

    public DongHuCitizen(Policeman police) {
        setPolices();
        register(police);
    }

    @Override
    public void notify(String action) {
        setAction(action);
        for (int i = 0; i < polices.size(); i++) {
            Policeman police = polices.get(i);
            police.setOut(this);
        }
    }

}
package cn.lynn.observer;

public class NanHuCitizen extends Citizen {

    public NanHuCitizen(Policeman police) {
        setPolices();
        register(police);
    }

    @Override
    public void notify(String action) {
        setAction(action);
        for (int i = 0; i < polices.size(); i++) {
            Policeman police = polices.get(i);
            police.setOut(this);
        }
    }

}
ConcreteObserver
package cn.lynn.observer;

public class DongHuPoliceman implements Policeman {

    @Override
    public void setOut(Citizen citizen) {
        String action = citizen.getAction();
        if(action.equals("normal")) {
            System.out.println("行为一切正常");
        } else if(action.equals("unnormal")) {
            System.out.println("有偷窃行为,东湖警察出动!");
        }
    }

}
package cn.lynn.observer;

public class NanHuPoliceman implements Policeman {

    @Override
    public void setOut(Citizen citizen) {
        String action = citizen.getAction();
        if(action.equals("normal")) {
            System.out.println("行为一切正常");
        } else if(action.equals("unnormal")) {
            System.out.println("有抢劫行为,南湖警察出动!");
        }
    }

}
Client
package cn.lynn.observer;

public class Client {

    public static void main(String[] args) {
        Policeman dhPolice = new DongHuPoliceman();
        Policeman nhPolice = new NanHuPoliceman();

        Citizen citizen = new DongHuCitizen(dhPolice);
        citizen.notify("normal");
        citizen.notify("unnormal");

        citizen = new NanHuCitizen(nhPolice);
        citizen.notify("normal");
        citizen.notify("unnormal");
    }
}
Result
行为一切正常
有偷窃行为,东湖警察出动!
行为一切正常
有抢劫行为,南湖警察出动!
Head First设计模式(C++)实战指南:掌握23种经典GOF模式 设计模式是面向对象软件设计经验的结晶,由Gang of Four(GoF)在1994年系统化提出,涵盖23种经典模式,按目的与职责划分为三大类:创建型模式:抽象对象创建过程,解耦系统与具体类依赖(如工厂、单例)。结构型模式:通过继承或组合构建更复杂的类/对象结构(如适配器、代理)。行为型模式:定义对象间通信与职责分配机制(如观察者、策略)。// 示例:不同模式类型的典型应用场景示意class ObjectCreator { /* 工厂模式 */ }; 阅读详情

相关推荐

GOF设计模式源码解析与实践

设计模式是软件工程中用于解决特定问题的一种形式化方法。它们提供了一种通用的语言,使得经验丰富的开发者能够描述他们设计中的特定方面,这样其他人就能理解和重复这些解决方案。设计模式通过借鉴其他开发者的经验,帮助新手避免常见陷阱,同时也使团队成员能够更高效地协作。

weixin_42355400的博客 1065

GOF23设计模式-行为型模式9-观察者模式(Observer)

观察者模式:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。又叫做发布-订阅(Publish-Subscribe)模式。

Tumbler 291

神经元细胞结构刨析(持续更新)

神经细胞的学习笔记

weixin_46596227的博客 2220

设计模式初始与介绍(GOF23)

设计模式GOF23 (GOF 四人帮) 》》》将设计者的思维融入大家的学习和工作中,更高层次的思考! 》》创建型模式: -单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。 》》结构型模式: -适配器模式、代理模式、桥接模式、组合模式、外观模式、享元模式。 》》行为型模式: -模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。 GitHub 项目路径持续..

你怎么还在用 ThinkPad 啊? 110

Simulink Test Sequence实战:5步搞定复杂逻辑测试(附Excel模板)

本文详细介绍了如何利用Simulink Test Sequence模块高效完成复杂逻辑测试。通过对比传统Excel方法的不足,阐述了Test Sequence以流程图和自然语言描述测试场景的优势,并提供了从环境搭建、逻辑构建到与Test Manager集成、利用Excel模板进行数据驱动的完整5步实战指南,帮助工程师将复杂的状态机或逻辑流测试从繁琐的‘体力活’转变为高效的‘技术活’。

snow3的博客 250

ABAP_自定义屏幕07—下拉列表框

ABAP_自定义屏幕07—下拉列表框 完成以下:页面中有下拉列表框,下拉框value=系统表SCRR的值 1、实现方法A-常用 1.1 在主程序定义字段 TYPES:BEGIN OF type_carrid, carrid LIKE scarr-carrid,"航线代码 carrname LIKE scarr-carrname,"航向名称 END OF type_carrid. DATA g_it_carrid TYPE STANDARD TABLE OF type_carrid

f346348157的博客 3870

漫画:什么是 “设计模式” ?

这本书是软件研发领域重要的里程碑,合著此书的四位作者Erich Gamma,Richard Helm,Ralph Johnson ,John Vlissides被业内称为GoF(Ga...

程序员小灰的博客 1978

Zynq 【SDK裸机开发之PS】——DDR的内存分配使用详解

Zynq如果跑操作系统的话,内存管理的工作都会交给系统来操作,但是如果是裸机的话,则需要自己对DDR3的内存进行管理。

shizhibuyi1234的博客 7376

iOS开发中常用的设计模式

GoF23中的设计模式 设计模式的经典名著—DesignPatterns:Elements ofReusable Object-Oriented Software,中文译本名为《设计模式—可复用面向对象软件的基础》的四位作者Erich Gamma、Richard Helm、Ralph Johnson,以及John Vlissides,这四个人常被称为Gang of Four,即四人组,简称GoF

SkewRain的专栏 804

perl 安装DBI和DBD

还可以从cpan.perl.org站点下载tar压缩文件形式的源代码发行版本,解压缩后,切换到相应的文件目录 cd DBI-1.54 perl Makefile.PL make make test make install 安装DBD时候 需要export ORACLE_HOME 验证安装: perldoc DBD::Oracle perldoc DBI 在线文档; perldoc -m

zhaoyangjian724的专栏 1754

SEATA安装使用

springcloudalibaba集成seata分布式事务、seata持久化

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 2368

GoF的23种设计模式

一、设计模式的分类 1.根据模式的目的:即模式是用来完成什么工作的,这种方式分为创建型模式、结构型模式和行为型模式。 (1)创建型模式:用于描述怎么样创建对象,主要特点是:将对象的创建和使用分离,GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 (2)结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。 (3)行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的

tangyin_007的博客 1161

某物data魔改与变种算法还原(含加解密Py纯算)

某物data加解密、设备指纹魔改、变异、自定义加密分析与纯算还原

吴秋霖的博客 1278

23种设计模式介绍(Python示例讲解)

设计模式(Design Pattern)是一套被广泛接受的、可重复使用的软件设计解决方案。它们是在软件开发过程中对常见问题的反复实践和总结得出的经验和思想的表现。1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。设计模式是一种解决特定问题的经过测试和验证的通用解决方案,它们被广泛应用于软件工程和计算机科学中。下面列出了常见的23种设计模式。

匠人精神,持之以恒! 2788

2026 AI浏览器Agent终极对比:BrowserAct、agentBrowser、PP-Browser 谁更适合落地?(安装+实战+场景全覆盖)

1.不要盲目追求最新框架:很多人跟风用agentBrowser,结果业务是多步骤复杂办公流程,反而不如BrowserAct稳定;2.风控场景优先PP-Browser:但凡需要登录账号、频繁访问正规平台,无脑选PP-Browser,能避开99%的封禁问题;3.AI批量解析优先agentBrowser:做知识库爬取、网页内容总结、批量问答,省Token就是省成本,长期使用性价比碾压另外两者;4.个人开发调试优先BrowserAct:容错高、日志全、调试简单,新手上手最快,不容易报错翻车。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 328

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

GOF二十三种设计模式之单例模式

二、设计模式(GOF二十三种设计模式) 设计模式分三种,(一共二十三个) 创建型模式 单例模式,原型模式,建造者模式 抽象工厂模式,工厂模式 结构型模式 适配器模式,桥接模式,装饰模式 组合模式,外观模式,享元模式 代理模式 行为模式 模板模式,命令模式,访问者模式,迭代器模式,观察者模式 中介者模式,备忘录模式,解释器模式(Interperter模式) 状态模式,策略模式,职责...

Coding马+ 173

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

设计模式/框架源码分析_GOF23 设计模式

设计模式GOF23 • 将设计者的思维融入大家的学习和工作中,更高层次的思考! • 创建型模式: 单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。 • 结构型模式: 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模 式。 • 行为型模式: 模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模 式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。 单例模式 核心作用: – 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。 常见应用场景: Win

LiLi的博客 520

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

击鼓传花java_常见的java设计模式详解

1. 根据目的来分根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式 3 种。创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型...

weixin_39595487的博客 276

gof设计模式回顾

gof23根据讲师学习笔记回顾: 1.gof:Gang of Four;叫grasp更具有针对性,解决具体的问题; ---------------------总共分为三大类: ---------创建型:(6):Singleton单例、Builder建造者、简单工厂(也算是吧)、FactoryMethod工厂方法、AbstractFactory抽象工厂 、Prototype原型(注意深复制浅复...

weixin_30757793的博客 98

设计模式

设计模式总体有3种:GOF 23、J2EE、.Net三种设计模式 主要介绍下GOF 23设计模式 (1)--|创建类型      --|单例模式(一个对象一个实例)      --|工厂模式          --|简单工厂          --|抽象工厂          --|工厂方法      --|对象池模式 (2)--|结构型      --|外观模式

ccl_only 的专栏 356

Java设计模式 -- GOF23

一、设计模式分类 • 创建型模式: – 单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。 • 结构型模式: – 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模 式。 • 行为型模式: – 模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模 式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。 二、设计模式 1、单例模式 核心作用: 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 实现方式: 常见五种单例模式的分类 懒汉式(线程安全,调用率

xiangchaoming的博客 406

gpio的8种工作模式_Java成神路上之设计模式系列教程之一

Java成神路上之设计模式系列教程之一千锋-Feri在Java工程师的日常中,是否遇到过如下问题:Java 中什么叫单例设计模式?请用Java 写出线程安全的单例模式?什么是设计模式?你是否在你的代码里面使用过任何设计模式?解释下什么是观察者模式?使用工厂模式最主要的好处是什么?在哪里使用?等等相关的问题,那么问题来了,究竟什么是设计模式,它与我们又有什么关系?在我们的日常开发中充当什么样的作用?...

weixin_39739404的博客 102

设计模式深度解析:从理论认知到项目实战

本文系统介绍了Java设计模式的应用实践,主要包含以下内容: 设计模式分类体系:详细解析GoF 23种设计模式,分为创建型、结构型、行为型三大类,涵盖单例、工厂、代理、策略等常用模式。 实战应用案例: 订单系统:策略模式处理多种支付方式,状态模式管理订单状态流转 秒杀系统:策略模式变体实现动态限流算法切换 日志系统:观察者模式实现事件通知机制 设计价值: 提高代码复用性和可维护性 遵循开闭原则,便于扩展 解耦系统组件,增强灵活性 进阶思考:强调设计模式是手段而非目的,需结合实际场景合理运用,避免过度设计。

m0_46633338的博客 636

**行为型设计模式**的11种经典模式,它们关注对象之间的通信、职责分配与算法的灵活封装

- **责任链(Chain of Responsibility)**:将请求沿处理者链传递,每个处理者决定是否处理或转发,实现松耦合的请求分发。 - **中介者(Mediator)**:用一个中介对象封装一组对象间的交互,降低对象间直接依赖(如聊天室中的消息路由)。 - **备忘录(Memento)**:在不破坏封装的前提下捕获并外部保存对象内部状态,以便后续恢复(如文本编辑器的撤销点)。 - **访问者(Visitor)**:在不修改类的前提下,为一组类的对象添加新操作(适用于数据结构稳定但操

[Blog][Domain] programb.blog.youkuaiyun.com 223

设计模式-23种设计模式

设计模式-23种设计模式 目录 文章目录前言设计模式简单介绍创建型1. 工厂模式2. 抽象工厂模式3. 单例模式4. 建造者模式建造者模式(Builder Pattern)建造者模式详解设计模式:Builder模式5. 原型模式结构型1. 适配器模式2. 桥接模式3. 过滤器模式4. 组合模式5. 装饰器6. 外观模式7. 享元模式8. 代理模式行为型1. 责任链模式2. 命令模式3. 解释器模式4. 迭代器模式5. 终结者模式6. 备忘录模式7. 观察者模式8. 状态模式9. 空对象模式10. 策略模式1

莫兮的博客 5134
上一篇: 某大型银行深化系统之十九:日志规范
下一篇: Android柳叶刀之Button之UI交互
innovation
博客等级 码龄14年 251粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值