观察者模式的效果和实现时的注意事项

观察者模式的效果和实现时的注意事项

首页冒险解谜观察者系统重复更新时间:2024-08-03

效果

实现面向不特定类型对象的通知

一般来讲通知也是一种调用,也就是说,当目标通知观察者的时候,通常的做法需要目标类了解观察者类的信息。观察者模式定义了观察者抽象接口,只要具体的观察者实现了观察者接口就可以加入到观察者队列中并接收目标的通知。也就是说作为通知者的目标类不需要了解具象观察者类的细节,从而实现了解耦。

实现面向不特定多数对象的通知

观察者对象都被登录到目标类的观察者列表中,目标类发出通知方法只是简单的依次调用列表中观察者对象的通知接口。无论这个列表中的观察者对象是多还是少,通知的方式都完全相同。观察者模式就是通过这种方式实现了面向不特定多数观察者的通知。

实现

拉模型还是推模型

所谓拉模型就是目标对象仅通知观察者有变化这件事,而详细内容由观察者自己从目标对象处取得;而推模型则是将变化的内容,尽量详细地随通知一起发送。拉模型扩展灵活,但效率偏低;而推模型效率虽高,但灵活性不足。两种方法各有利弊,需要根据实际情况进行取舍。作为一个折中的方案,在通知的时候同时带上变化的对象和变化的类型,很多时候都会是一个足够好的选择。

避免无效引用

观察者模式中的观察者接收通知的前提条件就是在目标对象中进行登录。当观察者不再需要接收目标对象的通知时就需要及时地取消登录。这一点一般不会发生严重的问题。初学者经常容易发生的问题是,当观察者对象被销毁时有可能会遗漏取消登录这件事,其结果就是通知时访问无效对象。另一种情况是,当观察者保持着目标对象的参照时,如果目标对象在观察者之前被销毁,也同样可能出现访问无效对象的情形。无论哪种情况,只要认真设计,保持良好的退出机制应该都不难解决。


觉得本文有帮助?请分享给更多人。

关注【面向对象思考】,轻松学习每一天!

有任何疑问,欢迎留言提问或讨论。

面向对象设计,面向对象编程,面向对象思考!

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved