专业的编程技术博客社区

网站首页 > 博客文章 正文

设计模式第2招第1式之观察者模式(观察者设计模式的优点)

baijin 2024-10-01 07:33:04 博客文章 8 ℃ 0 评论

设计模式

前言:

本系列文章共23篇,详细介绍GOF (Gang Of Four)所定义的23种设计模式。共分为三大类对应标题中的3大招,每类中的每一种设计模式对应3大招中的某一式:

第1招-创建型(共5式):单例模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式;

第2招-行为型(共11式):观察者模式,策略模式,命令模式,状态模式,解释器模式,迭代器模式,中介者模式,访问者模式,备忘录模式,责任链模式,模板方法模式;

第3招-结构型(共7式):适配器模式,外观模式,代理模式,装饰者模式,组合模式,桥接模式,享元模式。

MVC (Model-View-Controller, 模型-视图-控制器):是一种框架模式,包括Model-View-Controller三部分。其中Model负责数据模式为程序提供数据支持;View负责界面显示与用户交互;Controller将Model与View分离,处理View与Model的交互工作。MVC框架模式解耦了数据和数据的表示,提高的代码的可复用、可维护特性。

内容摘要:

  1. 定义

  2. 应用场景

  3. Java代码实例

  4. 优缺点

  5. 小结

一、定义

观察者模式:表示一种一对多的依赖关系,多个对象同时监听一个对象,当被监听对象的状态发生变化时,其可以动态的改变其本身。又称发布订阅模式。

举个例子:上学时,所有的“学生”都会注意“下课铃”,当下课领一响,学生本就做飞鸟状,该干嘛干嘛去了。这里的“学生”就是观察者,而“下课铃”就是被观察者,当“下课铃”的状态“响”发生变化时,“学生”会知道发生了变化进而做出动作。

观察者模式UML图

二、应用场景

  1. 天气预报也算是观察者模式;

  2. 报刊的订阅;

  3. 当很多对象需要知道一个对象的状态变化时;

三、Java代码实例

观察者模式涉及四个角色,分别是Subject Observer ConcreteSubject ConcreteObserver:

1.创建Observer和ConcreteObserver;

Observer

2.创建Observable和具体ConcreteObservable;



Observable

3.客户端使用。



客户端使用

四、优缺点

优点:

  1. 观察者与被观察者分离又不失联系,可以连接多个层次的架构。
  2. 解耦了观察者和被观察者。被观察者只有一个抽象观察者的列表;

  3. 建立了一种一对多的关系,被观察者可以向所有注册的观察者发布通知;

缺点:

  1. 如果其中的某个观察者发生阻塞,则整个通知过程都要被阻;
  2. 避免被观察者对象之间的循环依赖;

  3. 被观察者通知所有的观察者需要很大时间消耗;

  4. 观察者无法知道被观察者的变化细节;

五、小结

观察者模式属于行为型模式,主要是用于对象之间的通信。相对于创建型模式稍显复杂,需要涉及多个角色。不过,观察者模式是最常用且最有用的设计模式之一,很多一般无解的程序设计问题都可以使用观察者模式来解决。向Android开发中的优秀框架RxJava/RxAndroid和EventBus等都使用了被优化过的观察者模式。学会观察者模式,让你的程序更上一层楼,来试试。

美女程序员

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表