Python:设计模式之模板模式

举报
彭世瑜 发表于 2021/08/13 23:52:22 2021/08/13
【摘要】 模板模式属于行为模式,通过模板方法来定义程序框架或算方法 可以使用抽象类来定义算法步骤,由子类来实现算法中特定步骤 适用场景 1、当多个算法或类实现类似或相同逻辑的时候 2、在子类中实现算法有助于减少重复代码的时候 3、可以让子类利用覆盖事项行为来定义多个算法的时候 主要意图 1、适用基于操作定义算法的框架 2、重新定义子类的某些操作,而无需修改算法的结构 3、...

模板模式属于行为模式,通过模板方法来定义程序框架或算方法
可以使用抽象类来定义算法步骤,由子类来实现算法中特定步骤

适用场景

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
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

模板方法模式-钩子

钩子是在抽象类中声明的方法,通常被赋予一个默认实现。
钩子背后的思想是为子类提供按需钩取算法的能力

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

好莱坞原则

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

模板方法模式,是高级抽象类,安排定义算法的步骤,
根据算法的工作方式,通过调用底层类来定义各个步骤的具体实现

模板方法模式的优点

1、没有代码重复
2、模板方法模式使用继承而不是合成,因此能够对代码进行重用
3、灵活性允许子类决定如何实现算法中的步骤

模板方法模式的缺点

1、调试和理解模板方法模式中的流程序列有时会令人困惑
2、模板方法模式可能会使维护变得异常痛苦

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

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/93160614

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。