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>
目录
相关文章
|
1月前
|
测试技术 UED Python
App自动化测试:高级控件交互技巧
Appium 的 Actions 类支持在移动应用自动化测试中模拟用户手势,如滑动、长按等,增强交互性测试。ActionChains 是 Selenium 的概念,用于网页交互,而 Actions 专注于移动端。在Python中,通过ActionChains和W3C Actions可以定义手势路径,例如在手势解锁场景中,先点击设置,然后定义触点移动路径执行滑动解锁,最后验证解锁后的元素状态。此功能对于确保应用在复杂交互下的稳定性至关重要。
29 5
|
设计模式 算法 Python
Python:设计模式之模板模式
Python:设计模式之模板模式
42 0
|
设计模式 Python
Python:设计模式之工厂模式
工厂: 表示负责创建其他类型对象的类
83 0
|
设计模式 Python
Python:设计模式之门面模式
Python:设计模式之门面模式
48 0
|
设计模式 程序员 Python
Python 实现设计模式之工厂模式
设计模式是可重复使用的编程方案,已被用于各种现实世界的环境中,并被证明能产生预期的结果。在本文中,我们将学习最常见的设计模式之一:工厂模式。
|
1月前
|
存储 Kubernetes 调度
K8s Pod亲和性、污点、容忍度、生命周期与健康探测详解(下)
本文全面探讨了Kubernetes集群中Pod的四种关键机制——Pod亲和性、污点(Taints)、容忍度(Tolerations)、生命周期以及健康探测,为读者提供了深入理解并有效应用这些特性的指南。
|
2月前
|
SQL 存储 关系型数据库
【C/C++ 应用开发 数据库】入门 Qt数据库编程:从基本操作到高级技巧
【C/C++ 应用开发 数据库】入门 Qt数据库编程:从基本操作到高级技巧
81 0
|
12月前
|
机器学习/深度学习 数据采集 运维
数据挖掘实践(金融风控):金融风控之贷款违约预测挑战赛(上篇)[xgboots/lightgbm/Catboost等模型]–模型融合:stacking、blending
数据挖掘实践(金融风控):金融风控之贷款违约预测挑战赛(上篇)[xgboots/lightgbm/Catboost等模型]–模型融合:stacking、blending
|
11月前
|
C语言
可能你看到的大部分教材里讲的指针和指针变量是一个概念,但是真的是这样吗?看完我这篇文章肯定会颠覆你的认知哦?
可能你看到的大部分教材里讲的指针和指针变量是一个概念,但是真的是这样吗?看完我这篇文章肯定会颠覆你的认知哦?
112 0
可能你看到的大部分教材里讲的指针和指针变量是一个概念,但是真的是这样吗?看完我这篇文章肯定会颠覆你的认知哦?
|
设计模式 Python
Python:设计模式之反模式
Python:设计模式之反模式
60 0