装饰器模式、策略模式和回调模式。

简介: 【6月更文挑战第29天】

下面我将提供三种设计模式的Python实现示例:装饰器模式、策略模式和回调模式。

1. 装饰器模式

装饰器模式允许我们向一个对象添加新的功能,同时不改变其结构。在Python中,装饰器通常是一个函数,它接受一个函数作为参数并返回一个新的函数。

def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()  # 输出: Something is happening before... Hello! ...after the function is called.

2. 策略模式

策略模式定义了一系列算法,并将每一个算法封装起来,使它们可以互换。策略模式让算法独立于使用它的客户端。

from abc import ABC, abstractmethod

class Strategy(ABC):
    @abstractmethod
    def execute(self):
        pass

class ConcreteStrategyA(Strategy):
    def execute(self):
        return "Executed strategy A"

class ConcreteStrategyB(Strategy):
    def execute(self):
        return "Executed strategy B"

class Context:
    def __init__(self, strategy: Strategy):
        self.strategy = strategy

    def set_strategy(self, strategy: Strategy):
        self.strategy = strategy

    def do_operation(self):
        return self.strategy.execute()

# 使用策略模式
context = Context(ConcreteStrategyA())
print(context.do_operation())  # 输出: Executed strategy A

context.set_strategy(ConcreteStrategyB())
print(context.do_operation())  # 输出: Executed strategy B

3. 回调函数

回调模式允许一个函数作为参数传递给另一个函数,然后在某个点被调用。这在事件处理、异步编程等领域非常常见。

def callback_function(data):
    print(f"Callback received data: {data}")

def function_with_callback(data, callback):
    print("Function is processing data.")
    # 模拟数据处理
    processed_data = data + " and processed it."
    callback(processed_data)

function_with_callback("Function received", callback_function)
# 输出: Function is processing data. Callback received data: Function received and processed it.

在上述示例中,callback_function 是一个回调函数,它被作为参数传递给 function_with_callback 函数,并在数据处理完成后被调用。

目录
相关文章
|
C++ Windows
vs2017下dump文件自动生成及dump文件的调试使用
vs2017下dump文件自动生成及dump文件的调试使用
841 0
vs2017下dump文件自动生成及dump文件的调试使用
|
设计模式 中间件 程序员
【C/C++ 奇异递归模板模式 】C++中CRTP模式(Curiously Recurring Template Pattern)的艺术和科学
【C/C++ 奇异递归模板模式 】C++中CRTP模式(Curiously Recurring Template Pattern)的艺术和科学
975 3
|
Rust 前端开发 JavaScript
Tauri 开发实践 — Tauri 日志记录功能开发
本文介绍了如何为 Tauri 应用配置日志记录。Tauri 是一个利用 Web 技术构建桌面应用的框架。文章详细说明了如何在 Rust 和 JavaScript 代码中设置和集成日志记录,并控制日志输出。通过添加 `log` crate 和 Tauri 日志插件,可以轻松实现多平台日志记录,包括控制台输出、Webview 控制台和日志文件。文章还展示了如何调整日志级别以优化输出内容。配置完成后,日志记录功能将显著提升开发体验和程序稳定性。
769 1
Tauri 开发实践 — Tauri 日志记录功能开发
|
10月前
|
Unix 虚拟化 Windows
Windows Server 2025 中文版、英文版下载 (2025 年 2 月更新)
Windows Server 2025 中文版、英文版下载 (2025 年 2 月更新)
1866 7
Windows Server 2025 中文版、英文版下载 (2025 年 2 月更新)
|
SQL 机器学习/深度学习 分布式计算
MaxCompute产品使用问题之如何查看所有的表结构
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
303 0
|
JavaScript API
Qt HTTP和HttpServer
Qt HTTP和HttpServer
640 1
|
数据采集 自然语言处理 数据可视化
优秀python系统案例】基于python Flask的电影票房数据爬取与可视化系统的设计与实现
本文介绍了一个基于Python Flask框架开发的电影票房数据爬取与可视化系统,该系统利用网络爬虫技术从豆瓣电影网站抓取数据,通过Python进行数据处理和分析,并采用ECharts等库实现数据的可视化展示,为电影行业从业者提供决策支持。
1648 2
优秀python系统案例】基于python Flask的电影票房数据爬取与可视化系统的设计与实现
|
机器学习/深度学习 自然语言处理 算法
分词算法在自然语言处理中的应用与性能比较
分词算法在自然语言处理中的应用与性能比较
|
机器学习/深度学习 边缘计算 5G
室内定位之5G定位
室内定位之5G定位
971 1
|
Java Python
使用Python的concurrent.futures模块简化多线程与多进程编程
使用Python的concurrent.futures模块简化多线程与多进程编程
379 0