返回

设计模式(二):观察者模式

Android

在软件开发中,设计模式是经过验证的解决方案,用于解决常见编程问题。观察者模式是一种设计模式,它允许对象监视其他对象并对状态变化做出反应。

观察者模式的组成部分

观察者模式包含以下角色:

  • 主题 (Subject) :一个维护一个或多个观察者的对象,并在其状态发生变化时通知它们。
  • 观察者 (Observer) :一个注册到主题的对象,当主题的状态发生变化时,它将被通知。
  • 具体主题 (Concrete Subject) :一个实现主题接口的类,包含特定业务逻辑。
  • 具体观察者 (Concrete Observer) :一个实现观察者接口的类,包含特定行为,当主题的状态发生变化时,该行为将被执行。

观察者模式的优点

  • 松散耦合: 观察者和主题之间是松散耦合的,这使得观察者的添加或删除变得容易。
  • 可扩展性: 观察者可以根据需要轻松添加到系统中,而无需修改现有代码。
  • 代码复用: 观察者接口定义了通知方法,这可以由不同的具体观察者实现。

观察者模式的应用

观察者模式在各种应用中都很有用,包括:

  • 事件处理:在用户交互或系统事件发生时通知组件。
  • 状态变化:在对象状态发生变化时更新视图或其他组件。
  • 异步通信:在对象之间实现异步通信,例如在消息队列中。

如何实现观察者模式

以下是一个用 Python 实现观察者模式的分步指南:

1. 定义主题接口

class Subject:
    def register_observer(self, observer):
        pass

    def remove_observer(self, observer):
        pass

    def notify_observers(self):
        pass

2. 定义观察者接口

class Observer:
    def update(self, subject):
        pass

3. 创建具体主题类

class ConcreteSubject(Subject):
    def __init__(self):
        self._observers = []
        self._state = None

    def register_observer(self, observer):
        self._observers.append(observer)

    def remove_observer(self, observer):
        self._observers.remove(observer)

    def notify_observers(self):
        for observer in self._observers:
            observer.update(self)

    def set_state(self, state):
        self._state = state
        self.notify_observers()

4. 创建具体观察者类

class ConcreteObserverA(Observer):
    def __init__(self, name):
        self.name = name

    def update(self, subject):
        print(f"{self.name} received an update from {subject}")

5. 使用观察者模式

subject = ConcreteSubject()
observer1 = ConcreteObserverA("Observer 1")
observer2 = ConcreteObserverA("Observer 2")

subject.register_observer(observer1)
subject.register_observer(observer2)

subject.set_state("New state")

在这个例子中,当 ConcreteSubject 的状态被设置为 "New state" 时,它将通知两个 ConcreteObserverA 对象。