观察者模式?

应用场景及解决问题,还有优缺点?

最近产生了一个问题,比如一个酒店的房间  会产生很多种状态,比如:有人入住,人走退房,房间脏了,空调坏了,电视坏了等等,一些状态,那么我们在代码中要实现无限的if() else吗?然也不是不可以这不过这样不利于后期维护,后期业务需求有变动的话还要改好多好多,于是想到了我们项目中常用的EventBus和RxJava还有notifyDataSetChanged();,又学习了一下它的原理,他的原理就是采用了观察者模式,观察者模式简单介绍一下,观察者模式分为观察者和被观察者,被观察者通过订阅观察者来进行时时更新,举个例子比如 警察抓小偷,警察和小偷之间就要达成这种关系,警察时观察者,小偷是被观察者,警察需要时时刻刻盯着小偷的一举一动,才保证不会错过任何有动作的瞬间,在程序里不需要这样,在程序里时时刻刻监听太浪费资源程序里可以采用订阅或者注册的方式来告诉被观察者 你的某某状态更新时告诉我,这样避免了浪费资源,又做到了最高反馈。

观察者模式的应用场景?

一个对象状态改变通知其他对象的问题和对象间一对多的依赖关系适合使用观察者模式

当一个对象的数据更新时需要通知其对象 ,但是这个对象又不希望和被通知的那些对象产值紧耦合的关系

一个对象的数据更新时这个对象需要让其他对象也更新自己的数据但是这个对象不知道具体有多少数据需要更新也可使用观察者模式

 可以解决哪些问题?

一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。

当一个对象的数据更新时需要通知其对象 ,但是这个对象又不希望和被通知的那些对象产值紧耦合的关系

一个对象的数据更新时这个对象需要让其他对象也更新自己的数据但是这个对象不知道具体有多少数据需要更新也可使用观察者模式

优点:

第一、观察者模式在被观察者和观察者之间建立一个抽象的耦合。被观察者角色所知道的只是一个具体观察者列表,每一个具体观察者都符合一个抽象观察者的接口。被观察者并不认识任何一个具体观察者,它只知道它们都有一个共同的接口。

由于被观察者和观察者没有紧密地耦合在一起,因此它们可以属于不同的抽象化层次。如果被观察者和观察者都被扔到一起,那么这个对象必然跨越抽象化和具体化层次。

第二、观察者模式支持广播通讯。被观察者会向所有的登记过的观察者发出通知,

缺点: 

  1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。

  2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。

  3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。

 

 

 

好了,目前只学习到这么多,欢迎各位来补充,日后学习到新的还会持续更新,不喜勿喷

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python中,可以使用观察者模式来实现对象之间的一对多依赖关系。观察者模式包含两个主要角色:主题(Subject)和观察者(Observer)。 下面是一个简单的示例,演示了如何在Python中使用观察者模式: ```python # 定义主题类 class Subject: def __init__(self): self.observers = [] def attach(self, observer): self.observers.append(observer) def detach(self, observer): self.observers.remove(observer) def notify(self, message): for observer in self.observers: observer.update(message) # 定义观察者类 class Observer: def update(self, message): print("Received message:", message) # 创建主题对象观察者对象 subject = Subject() observer1 = Observer() observer2 = Observer() # 将观察者对象添加到主题对象观察者列表中 subject.attach(observer1) subject.attach(observer2) # 主题对象发送通知观察者 subject.notify("Hello, observers!") ``` 运行以上代码,输出结果为: ``` Received message: Hello, observers! Received message: Hello, observers! ``` 在这个示例中,主题类(Subject)维护了一个观察者列表,并提供了attach、detach和notify方法。attach方法用于将观察者添加到列表中,detach方法用于从列表中移除观察者,notify方法用于通知所有观察者观察者类(Observer)定义了一个update方法,用于接收主题对象发送的通知。 通过创建主题对象观察者对象,并将观察者对象添加到主题对象观察者列表中,可以实现主题对象的状态变化时自动通知观察者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值