在前端开发中,观察者模式是一种常见的设计模式。它定义了一种对象之间的一对多依赖关系,让多个观察者对象同时监听一个主题对象,当主题对象状态发生改变时,所有观察者对象都会得到通知并自动更新。
虽然这个模式看起来简单,但是理解和实现它可能会有一定的挑战。在本文中,我们将通过 TypeScript 示例代码和深入探讨来更好地理解和应用观察者模式。
观察者模式基础
观察者模式由两个主要角色组成:Subject(主题)和 Observer(观察者)。他们之间的关系如下图所示:
- Subject(主题):主题是被观察的对象,当它的状态发生改变时,会通知所有注册的观察者,并调用它们的更新方法。在 TypeScript 中,可以使用抽象类或接口来表示主题。
- Observer(观察者):观察者是需要被通知的对象,它们注册到主题中以接收通知并响应状态更改。在 TypeScript 中,可以使用接口或类来表示观察者。
TypeScript 实现观察者模式
让我们看一下如何使用 TypeScript 来实现观察者模式。
首先,我们需要定义 Subject 接口和 Observer 接口:
-- -------------------- ---- ------- --------- ------- - -------------------------- ---------- ----- ------------------------ ---------- ----- ------------------ ----- - --------- -------- - --------- ----- -
接下来,我们将通过创建一个具体的主题类 WeatherStation 和两个具体的观察者类 TemperatureDisplay 和 HumidityDisplay 来演示如何使用观察者模式。
-- -------------------- ---- -------
----- -------------- ---------- ------- -
------- ------------ ------ - --
------- --------- ------ - --
------- ---------- ---------- - ---
------ -------------------------- ---------- ---- -
------------------------------
-
------ ------------------------ ---------- ---- -
----- ----- - ---------------------------------
-- ------ --- --- -
---------------------------- ---
-
-
------ ------------------ ---- -
--- ------ -------- -- --------------- -
------------------
-
-
------ --------------------------- -------- ---- -
---------------- - ------------
-----------------------
-
------ --------------------- -------- ---- -
------------- - ---------
-----------------------
-
------ ----------------- ------ -
------ -----------------
-
------ -------------- ------ -
------ --------------
-
-
----- ------------------ ---------- -------- -
------- ------------ ------ - --
------------------- -------- -------- -
-------------------------------
-
------ --------- ---- -
---------------- - ------------------------------
-------------------- ------------ ----------------------
-
-
----- --------------- ---------- -------- -
------- --------- ------ - --
------------------- -------- -------- -
-------------------------------
-
------ --------- ---- -
------------- - ---------------------------
-------------------- --------- -------------------
-
-在这个例子中,我们创建了一个主题类 WeatherStation,它有一个温度属性和一个湿度属性。我们还定义了两个观察者类 TemperatureDisplay 和 HumidityDisplay,它们会从 WeatherStation 中获取温度和湿度并显示出来。
当 WeatherStation 的温度或湿度发生变化时,它会调用 notifyObservers() 方法来通知所有注册的观察者并调用它们的 update() 方法
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/5151