来源:优游网责编:网络时间:2024-11-03 12:51:30
定义
观察者模式是一种行为设计模式,它定义了一对多的依赖关系,以便当对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。该模式通常用于实现订阅机制,以在发布者和订阅者之间建立松耦合的关系。
核心理念
观察者模式的核心思想是将“观察者”与“被观察者”分开。当被观察者(也称为主体)发生变化时,所有观察者都会自动收到通知并进行相应处理。这种模式减少了系统中对象之间的耦合,使系统更加灵活和可扩展。
成分
主体:维护一组观察者对象,并在自身状态发生变化时通知这些观察者。观察者:定义一个接口或抽象类来接收来自主题的通知并更新它们。 ConcreteSubject(特定主题):包含特定状态并在状态发生变化时通知所有观察者的特定主题对象。 ConcreteObserver:具体观察者,实现更新方法并定义收到通知时要执行的操作。类图示例
+--------------------+ +--------------------+|主题|---------|观察者|+--------------------+ +---------------- -------- ----+| + 附加(观察者)| | + 更新() || + 分离(观察者)| +---------------- --------+| + 通知观察者() | +--------------------+ ^ |+--------- -------------+|具体主题|+--------------------+| - 状态|| + getState() || + setState() |+--------------------+ ^ |+---------------- -- ----+|具体观察者|+--------------------+| - 主题|| + update() |+----- ------------------+类图解释
subject:维护观察者列表,并提供attach()和detach()方法用于添加和删除观察者。 notifyObservers()方法用于通知所有观察者。观察者:定义update() 方法,在主题发生变化时更新自身。 ConcreteSubject(具体主题):实现一个具体的主题类,维护状态并在状态改变时通知观察者。 ConcreteObserver(具体观察者):实现观察者接口,在接收主题通知时更新自身状态。代码示例
下面是观察者模式的一个简单示例,演示了主题对象如何通知观察者更新的状态:
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. 行为模式观察者模式
网络管理员不能只知道Ping,这三个命令也是必须的。
经典单机游戏现状:流星出大MOD、暗黑2有战网、Left 4 Dead 2有中国风
谁说你不能数到3?《求生之路》 精神续集《喋血复仇》 在这里
桃源美味:食来运转秘方解锁!
《Left 4 Dead 2》没有续集,那么会不会没有后继者继承衣钵呢?
Linux常用命令2
Linux chattr命令详解
ADB常用命令1
《人类跌落梦境》:沙雕游戏的代表作,盲流的岔路口
用户评论
这个游戏看起来很新颖有趣!喜欢这种观察和分析的游戏类型。
有18位网友表示赞同!
7. 行为模式... 这个设计听起来让人想念一下传统的策略类游戏
有7位网友表示赞同!
观察者的视角一定能带来一些不同的惊喜,期待多了解游戏的具体玩法!
有7位网友表示赞同!
一款注重心理和策略的游戏?我一定会玩一玩!
有6位网友表示赞同!
喜欢这种融合多种元素的设计,希望能有不同的挑战和体验。
有5位网友表示赞同!
7 的数字,是不是暗示了游戏难度和观察内容的复杂程度?
有12位网友表示赞同!
感觉这款游戏会考验玩家的逻辑思维能力!
有17位网友表示赞同!
有没有预示能获得不同结局的多种选择呢?
有15位网友表示赞同!
这种题材的游戏太少见了,希望能玩到有趣的剧情故事!
有16位网友表示赞同!
看着画面和风格,感觉很像科幻类型的游戏!
有14位网友表示赞同!
喜欢观察和分析,这款游戏绝对是刚需呀!
有8位网友表示赞同!
不知道游戏中的角色有多立体,期待有更丰富的人物设定!
有5位网友表示赞同!
"行为模式观察者"这名字真带感,让人对游戏的氛围很期待!
有18位网友表示赞同!
这种类型的游戏通常难度比较高,但我愿意挑战!
有11位网友表示赞同!
希望游戏能设计一些隐藏彩蛋和剧情细节!
有15位网友表示赞同!
这款游戏会不会有联机模式?和小伙伴一起观察那得多欢乐!
有6位网友表示赞同!
看了标题,感觉像是模拟人生的游戏吧?但是更注重行为分析!
有10位网友表示赞同!
期待游戏的音效表现,希望能营造出紧张刺激的氛围!
有14位网友表示赞同!
希望游戏画面设计精美,细节丰富!
有7位网友表示赞同!