7. 行为模式观察者模式

来源:优游网责编:网络时间:2024-11-03 12:51:30

定义

观察者模式是一种行为设计模式,它定义了一对多的依赖关系,以便当对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。该模式通常用于实现订阅机制,以在发布者和订阅者之间建立松耦合的关系。

核心理念

观察者模式的核心思想是将“观察者”与“被观察者”分开。当被观察者(也称为主体)发生变化时,所有观察者都会自动收到通知并进行相应处理。这种模式减少了系统中对象之间的耦合,使系统更加灵活和可扩展。

7. 行为模式观察者模式

成分

主体:维护一组观察者对象,并在自身状态发生变化时通知这些观察者。观察者:定义一个接口或抽象类来接收来自主题的通知并更新它们。 ConcreteSubject(特定主题):包含特定状态并在状态发生变化时通知所有观察者的特定主题对象。 ConcreteObserver:具体观察者,实现更新方法并定义收到通知时要执行的操作。类图示例

+--------------------+ +--------------------+|主题|---------|观察者|+--------------------+ +---------------- -------- ----+| + 附加(观察者)| | + 更新() || + 分离(观察者)| +---------------- --------+| + 通知观察者() | +--------------------+ ^ |+--------- -------------+|具体主题|+--------------------+| - 状态|| + getState() || + setState() |+--------------------+ ^ |+---------------- -- ----+|具体观察者|+--------------------+| - 主题|| + update() |+----- ------------------+类图解释

subject:维护观察者列表,并提供attach()和detach()方法用于添加和删除观察者。 notifyObservers()方法用于通知所有观察者。观察者:定义update() 方法,在主题发生变化时更新自身。 ConcreteSubject(具体主题):实现一个具体的主题类,维护状态并在状态改变时通知观察者。 ConcreteObserver(具体观察者):实现观察者接口,在接收主题通知时更新自身状态。代码示例

7. 行为模式观察者模式

下面是观察者模式的一个简单示例,演示了主题对象如何通知观察者更新的状态:

import java.util.ArrayList;import java.util.List;//Subject接口接口Subject { void Attach(Observerobserver);无效分离(观察者观察者); void notifyObservers(); }//具体主题类class ConcreteSubjectimplementsSubject { private ListObserver Observers=new ArrayList();私有字符串状态;公共字符串getState() { 返回状态; } public void setState(String state) { this.state=state;通知观察者(); } @Override public voidattach(Observerobserver){observers.add(observer); } @Override public void detach(Observerobserver) {observers.remove(observer); } @Override public void notifyObservers() { for (Observer 观察者: 个观察者) { Observer.update() ; } }}//观察者接口interface Observer { void update(); }//具体观察者类class ConcreteObserver Implements Observer { private String ObserverState;私有ConcreteSubject 主题;公共ConcreteObserver(ConcreteSubject subject) { this.subject=subject; this.subject.attach(this); } @Override public void update() { ObserverState=subject.getState(); System.out.println('观察者更新状态为:' + ObserverState); }}//客户端代码public class ObserverPatternExample { public static void main(String[] args) { ConcreteSubject subject=new ConcreteSubject(); ConcreteObserver 观察者1=new ConcreteObserver(subject); ConcreteObserver 观察者2=new ConcreteObserver(subject); subject.setState('状态1'); subject.setState('状态2'); }}代码解释

主题接口:定义添加、删除和通知观察者的方法。 ConcreteSubject 类:具体主题类,维护状态并通知观察者。 Observer接口:定义了update()方法。 ConcreteObserver类:具体的观察者类,实现update()方法,当主体状态改变时更新自己的状态。 ObserverPatternExample 类:客户端代码,演示如何通过观察者模式实现主体对象和观察者之间的通知机制。优势

松耦合:观察者模式实现了发布者和订阅者之间的松耦合。主体对象不需要知道观察者的细节,只需要通知观察者即可。动态扩展:可以动态添加或删除观察者,使系统更加灵活。遵守开放封闭原则:添加新的观察者时,不需要修改现有的主题代码。缺点

7. 行为模式观察者模式

通知顺序:主体对象会依次通知每个观察者,通知的顺序可能会影响系统的行为。性能开销:当观察者数量较多时,频繁的通知操作可能会造成性能开销。循环依赖:如果主题和观察者之间出现循环依赖,可能会导致系统死锁或无限循环。适用场景

用户评论

话少情在

这个游戏看起来很新颖有趣!喜欢这种观察和分析的游戏类型。

    有18位网友表示赞同!

熟悉看不清

7. 行为模式... 这个设计听起来让人想念一下传统的策略类游戏

    有7位网友表示赞同!

柠栀

观察者的视角一定能带来一些不同的惊喜,期待多了解游戏的具体玩法!

    有7位网友表示赞同!

百合的盛世恋

一款注重心理和策略的游戏?我一定会玩一玩!

    有6位网友表示赞同!

看我发功喷飞你

喜欢这种融合多种元素的设计,希望能有不同的挑战和体验。

    有5位网友表示赞同!

怅惘

7 的数字,是不是暗示了游戏难度和观察内容的复杂程度?

    有12位网友表示赞同!

昂贵的背影

感觉这款游戏会考验玩家的逻辑思维能力!

    有17位网友表示赞同!

别悲哀

有没有预示能获得不同结局的多种选择呢?

    有15位网友表示赞同!

抚笙

这种题材的游戏太少见了,希望能玩到有趣的剧情故事!

    有16位网友表示赞同!

我没有爱人i

看着画面和风格,感觉很像科幻类型的游戏!

    有14位网友表示赞同!

情深至命

喜欢观察和分析,这款游戏绝对是刚需呀!

    有8位网友表示赞同!

哥帅但不是蟋蟀

不知道游戏中的角色有多立体,期待有更丰富的人物设定!

    有5位网友表示赞同!

醉婉笙歌

"行为模式观察者"这名字真带感,让人对游戏的氛围很期待!

    有18位网友表示赞同!

残花为谁悲丶

这种类型的游戏通常难度比较高,但我愿意挑战!

    有11位网友表示赞同!

罪歌

希望游戏能设计一些隐藏彩蛋和剧情细节!

    有15位网友表示赞同!

限量版女汉子

这款游戏会不会有联机模式?和小伙伴一起观察那得多欢乐!

    有6位网友表示赞同!

病态的妖孽

看了标题,感觉像是模拟人生的游戏吧?但是更注重行为分析!

    有10位网友表示赞同!

抓不住i

期待游戏的音效表现,希望能营造出紧张刺激的氛围!

    有14位网友表示赞同!

心亡则人忘

希望游戏画面设计精美,细节丰富!

    有7位网友表示赞同!

猜你喜欢
最新游戏更多
热门专题更多
最新资讯更多