Python:设计模式之模板模式

简介: Python:设计模式之模板模式

模板模式属于行为模式,通过模板方法来定义程序框架或算方法

可以使用抽象类来定义算法步骤,由子类来实现算法中特定步骤

适用场景

1、当多个算法或类实现类似或相同逻辑的时候

2、在子类中实现算法有助于减少重复代码的时候

3、可以让子类利用覆盖事项行为来定义多个算法的时候

主要意图

1、适用基于操作定义算法的框架

2、重新定义子类的某些操作,而无需修改算法的结构

3、实现代码重用并避免重复工作

4、利用通用接口或实现

主要术语

AbstractClass 声明一个定义算法步骤的接口

ConcreteClass 定义子类特定的步骤

TemplateMethod 通过调用步骤方法来定义算法

代码示例

# -*- coding: utf-8 -*-

from abc import ABCMeta, abstractmethod


class AbstractClass(metaclass=ABCMeta):
    @abstractmethod
    def operation1(self):
        pass

    @abstractmethod
    def operation2(self):
        pass

    def template_method(self):
        self.operation1()
        self.operation2()


class ConcreteClass(AbstractClass):
    def operation1(self):
        print("ConcreteClass operation1")

    def operation2(self):
        print("ConcreteClass operation2")


if __name__ == '__main__':
    client = ConcreteClass()
    client.template_method()
    """
    ConcreteClass operation1
    ConcreteClass operation2
    """

模板方法模式-钩子

钩子是在抽象类中声明的方法,通常被赋予一个默认实现。

钩子背后的思想是为子类提供按需钩取算法的能力

通常,当子类必须提供时,会使用抽象方法,并且当子类的实现不是强制的时候,就会使用钩子

好莱坞原则

不要给我们打电话,我们会给你打电话。如果有适合的角色,影棚会给演员打电话

模板方法模式,是高级抽象类,安排定义算法的步骤,

根据算法的工作方式,通过调用底层类来定义各个步骤的具体实现

模板方法模式的优点

1、没有代码重复

2、模板方法模式使用继承而不是合成,因此能够对代码进行重用

3、灵活性允许子类决定如何实现算法中的步骤

模板方法模式的缺点

1、调试和理解模板方法模式中的流程序列有时会令人困惑

2、模板方法模式可能会使维护变得异常痛苦

参考

《Python设计模式第2版》第八章 模板方法模式-封装算法

            </div>
目录
相关文章
|
11月前
|
SQL 安全 PHP
PHP安全性实践:防范常见漏洞与攻击####
本文深入探讨了PHP编程中常见的安全漏洞及其防范措施,包括SQL注入、XSS跨站脚本攻击、CSRF跨站请求伪造等。通过实际案例分析,揭示了这些漏洞的危害性,并提供了具体的代码示例和最佳实践建议,帮助开发者提升PHP应用的安全性。 ####
369 6
|
10月前
|
机器学习/深度学习 自然语言处理 量子技术
《攻克新兴领域实体识别难题,NER技术突围之路》
命名实体识别(NER)是自然语言处理的基础任务,旨在从文本中识别特定实体。传统NER在常见领域表现良好,但在新兴领域如元宇宙、量子计算等面临挑战,主要因新术语频出且缺乏标注数据。为提升新兴领域的NER识别率,研究者探索了数据增强、迁移学习、多模态融合及领域自适应等方法,以应对数据匮乏、专业性强等问题,推动NER技术在前沿领域的应用与发展。
258 3
|
弹性计算 缓存 测试技术
阿里云ECS云服务器2核4G能支持多少人同时访问?2核4G5M并发量评测
阿里云ECS云服务器2核4G能支持多少人同时访问?2核4G5M并发量评测,2核4G服务器并发数性能测试,阿小云账号下的2核4G服务器支持20人同时在线访问,然而应用不同、类型不同、程序效率不同实际并发数也不同,2核4G服务器的在线访问人数取决于多个变量因素
|
机器学习/深度学习 存储 人工智能
人工智能的伦理困境与挑战
在本文中,我们将探讨人工智能技术的快速发展所带来的一系列伦理问题和挑战。随着AI技术的不断进步和应用范围的扩大,如何确保其发展符合道德标准、保护个人隐私以及避免潜在的社会不公成为了亟待解决的问题。本文旨在通过分析当前AI领域面临的主要伦理困境,并提出可能的解决方案或缓解措施,以促进更加负责任地使用和发展人工智能技术。
1216 1
|
存储 NoSQL 物联网
MongoDB在哪些领域有应用?
MongoDB在哪些领域有应用?
489 3
|
机器学习/深度学习 数据采集 人工智能
软件测试中的人工智能:现状与未来
随着人工智能技术的迅猛发展,软件测试领域正经历着深刻的变革。本文将探讨人工智能在软件测试中的应用、挑战以及未来的发展趋势,旨在为读者提供全面而深入的理解。
|
安全 编译器 PHP
PHP 8 新特性详解:更高效、更简洁的编程体验
本文详细介绍了PHP 8的新特性及其对开发者日常工作的影响。通过分析这些新特性,读者可以更好地理解PHP 8相较于之前版本的改进之处,并在实际项目中加以应用。
617 31
|
Windows
如何轻松解决C盘爆满情况——SpaceSniffer
如何轻松解决C盘爆满情况——SpaceSniffer
893 0
阿里云怎么注册商标?(附详细商标注册申请操作流程)
阿里云商标注册分为商标智能注册申请、商标顾问注册申请和商标安心注册申请,本文阿小云以商标智能注册申请为例来详细说下阿里云商标申请图文操作流程:
6489 0
阿里云怎么注册商标?(附详细商标注册申请操作流程)
|
传感器 存储 缓存
STM32--MPU6050与I2C外设
STM32--MPU6050与I2C外设
466 1