观察者模式的应用场景:
1、 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。
2、 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。
观察者模式的优点:
1、 Subject和Observer之间是松偶合的,分别可以各自独立改变。
2、 Subject在发送广播通知的时候,无须指定具体的Observer,Observer可以自己决定是否要订阅Subject的通知。
3、 遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。
观察者模式的缺陷:
1、 松偶合导致代码关系不明显,有时可能难以理解。(废话)
2、 如果一个Subject被大量Observer订阅的话,在广播通知的时候可能会有效率问题。(毕竟只是简单的遍历)
涉及的设计原则
1、 Identify the aspects of your application that vary and separate them from what stays the same. (找到系统中变化的部分,将变化的部分同其它稳定的部分隔开。)
在观察者模式的应用场景里变化的部分是Subject的状态和Observer的数量。使用Observer模式可以很好地将这两部分隔离开,我们可以任意改变Observer的数量而不需要去修改Subject,而Subject的状态也可以任意改变,同样不会对其Observer有任何影响。
2、 Program to an interface,not an implementation.(面向接口编程,而不要面向实现编程。)
Subject和Observer都使用接口来实现。Subject只需要跟踪那些实现了IObserver接口的对象,所以其只依赖于IObserver;而所有Observer都通过ISubject接口来注册、撤销、接收通知,所以它们也只依赖于 ISubject;所以这是面向接口编程的,这样的实现方式使得Subject和Observer之间完全没有任何耦合。
3、 Favor composition over inheritance.(优先使用对象组合,而非类继承)
观察者模式使用对象组合将Subject和若干observer联系起来。它们之间的关系不是通过类的继承而是在运行时的动态组合。
分享到:
相关推荐
总结起来,观察者模式在Android开发中主要体现在BroadcastReceiver和ContentObserver的使用上,它们帮助开发者实现组件间的通信和数据同步,提高了代码的灵活性和可维护性。通过ContentProvider,Android提供了一个...
* 观察者模式应用场景实例 * * 免责声明:本文只是以哈票网举例,示例中并未涉及哈票网任何业务代码,全部原创,如有雷同,纯属巧合。 * * 场景描述: * 哈票以购票为核心业务(此模式不限于该业务),但围绕购票...
观察者模式的实现方式有很多种,根据不同的应用场景和需求,可以有完全不同的实现方式。下面是一种经典的实现方式: ```java public interface Subject { void registerObserver(Observer observer); void ...
5. **应用实例**:观察者模式广泛应用于各种场景,如事件驱动编程、GUI组件通信、消息队列等。例如,当用户在网页上点击按钮时,按钮作为被观察者,会触发一系列事件,这些事件的监听器(观察者)会接收到通知并执行...
#### 三、观察者模式的应用场景 观察者模式广泛应用于各种场景,如: - **事件处理系统**:例如GUI框架中的按钮点击事件等。 - **消息订阅系统**:用户订阅某个服务后,该服务状态变化时会通知订阅者。 - **数据...
观察者模式,也被称为发布-订阅模式,是软件设计中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的...在实际项目中,正确使用观察者模式可以有效地管理组件间的交互,实现高效且易于维护的代码结构。
在《设计模式实现——观察者模式》这篇博客中,作者可能详细解释了观察者模式的概念、结构以及其在实际编程中的应用。以下是对观察者模式的详细阐述: 1. **模式定义**:观察者模式是一种对象行为型模式,它允许...
观察者模式(Observer Pattern)是...在实际应用中,观察者模式可以用于诸如用户界面组件监听模型数据变化、订阅发布系统、事件处理框架等多种场景。通过这种方式,代码结构更加清晰,符合开闭原则,易于维护和扩展。
6. ObserverSample.csproj:这是项目文件,包含了整个观察者模式应用的编译和构建信息。 在C#中,观察者模式通常通过以下步骤实现: 1. 定义主题(Subject):主题是被观察的对象,它维护了一个观察者列表,并提供...
下面将详细解释观察者模式的概念、结构以及如何在Java中应用这个模式。 **观察者模式的核心概念:** 1. **主题(Subject)**:它是被观察的对象,可以是任何具有状态变化的实体。主题维护着一个观察者列表,并负责...
在iOS应用中,观察者模式有多种应用场景: - 用户界面更新:当模型层的数据发生变化时,视图层可以通过KVO或NSNotification自动更新。 - 数据同步:不同组件之间可以通过观察者模式进行数据同步,确保数据一致性。 ...
本文将深入探讨Java内置的观察者模式,包括其原理、实现方式以及实际应用。 ### 观察者模式的核心概念 1. **主题(Subject)**:被观察的对象,也就是发出通知的一方。在Java中,通常通过实现`java.util....
在提供的压缩包文件中,`观察者模式模版和例子`可能包含了实现这些概念的代码示例,通过阅读和理解这些代码,你可以更好地掌握观察者模式的实现细节和应用方式。为了深入学习,建议先了解观察者模式的基本概念,然后...
你可以通过阅读这些材料,学习如何创建观察者和被观察者,以及如何在不同场景下有效地使用观察者模式。 通过学习观察者模式,你不仅可以提高代码的可维护性和可扩展性,还能更好地理解和利用面向对象设计的原则,如...
下面将详细介绍这两个关键组件以及如何使用它们来实现观察者模式。 1. `Observer`接口: - `Observer`接口提供了`update`方法,当被观察的对象状态发生变化时,该方法会被调用。通常,观察者会在这个方法中执行...
下面我们将深入探讨观察者模式的实现和应用。 首先,`Observable`类提供了添加、删除观察者和通知观察者的方法。当`Observable`对象的状态发生变化时,可以通过`setChanged()`方法标记状态为已变更,然后调用`...
观察者模式java 应用场景如下 现在有一个销售各类的电子商务网站的购物车(Shopping Cart)系统。现在本网站进行打折,分别情况如下: 1. 对所有的教材类图书实行每本降价一元的折扣 2. 对连环画类图书提供7%的...