世外云

详解Python设计模式编程中观察者模式与策略模式的运用

一、观察者模式

观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

1. 原理

详解Python设计模式编程中观察者模式与策略模式的运用-图1

观察者模式主要包括两个角色:主题(Subject)和观察者(Observer)。

- 主题:维护一系列观察者的列表,并允许添加、删除和通知观察者更新状态。

- 观察者:实现特定接口,用于接收主题的通知并更新自身状态。

2. 代码实现

详解Python设计模式编程中观察者模式与策略模式的运用-图2
from abc import ABC, abstractmethod

# 观察者接口
class Observer(ABC):
    @abstractmethod
    def update(self, data):
        pass

# 具体观察者A
class ConcreteObserverA(Observer):
    def update(self, data):
        print(f"ConcreteObserverA received data: {data}")

# 具体观察者B
class ConcreteObserverB(Observer):
    def update(self, data):
        print(f"ConcreteObserverB received data: {data}")

# 主题类
class Subject:
    def __init__(self):
        self.observers = []

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

    def unregister_observer(self, observer):
        self.observers.remove(observer)

    def notify_observers(self, data):
        for observer in self.observers:
            observer.update(data)

# 客户端代码
subject = Subject()
observer_a = ConcreteObserverA()
observer_b = ConcreteObserverB()

subject.register_observer(observer_a)
subject.register_observer(observer_b)

subject.notify_observers("Hello, observers!")

3. 应用场景

- GUI中的事件处理:当用户操作界面时,可以注册多个事件处理器来响应不同的事件,当事件发生时,通知所有已注册的事件处理器。

- 股票市场:当股票价格发生变化时,通知所有关注该股票的观察者。

- 实时数据流处理:当有新的数据产生时,通知所有订阅该数据的观察者进行处理。

二、策略模式

策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每个算法封装在一个具有共同接口的类中,使得它们可以相互替换,策略模式让算法独立于使用它的客户端。

策略模式主要包括两个角色:策略(Strategy)和上下文(Context),策略定义了执行算法的逻辑,上下文负责调用策略的具体实现。

```python

from abc import ABC, abstractmethod

from typing import List, Callable, TypeVar, AnyObject

import random

T = TypeVar("T", bound=Callable[..., AnyObject]) # 泛型类型变量T,表示任意可调用对象(包括函数、方法等)的返回值类型为AnyObject的对象,这里用AnyObject代表任意类型的参数和返回值,T的实际类型取决于实际传入的策略函数的类型,如果策略是整数加法,那么T就是int;如果策略是字符串反转,那么T就是str。

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客 游客
此处应有掌声~
评论列表
  • 墨池侍书
    2024年04月30日 04:05:35
    观察者模式与策略模式,双剑合璧,为Python编程注入了灵活性与智慧,值得一探!