欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 设计模式Python版 模板方法模式(下)

设计模式Python版 模板方法模式(下)

2025/3/14 13:55:49 来源:https://blog.csdn.net/zljgzw/article/details/146236119  浏览:    关键词:设计模式Python版 模板方法模式(下)

文章目录

  • 前言
  • 一、模板方法模式的钩子方法
  • 二、模板方法模式的钩子方法示例


前言

GOF设计模式分三大类:

  • 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。
  • 结构型模式:关注类和对象之间的组合,包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。
  • 行为型模式:关注对象之间的交互,包括职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。

接上一部分:《设计模式Python版 模板方法模式(上)》

一、模板方法模式的钩子方法

钩子方法的引入使得子类可以控制父类的行为

  • 最简单的钩子方法就是空方法
def display():pass
  • 另一种钩子方法可以用于对其他方法进行约束,这种钩子方法通常返回一个boolean类型的值,即返回true或false,用来判断是否执行某一个基本方法。

二、模板方法模式的钩子方法示例

  • 一个数据图表显示功能,该功能的实现包括以下步骤:
    • (1)从数据源获取数据。
    • (2)将数据转换为XML格式。
    • (3)以某种图表方式显示XML格式的数据。
  • 该功能支持多种数据源和多种图表显示方式,但所有的图表显示操作都基于XML格式的数据,因此可能需要对数据进行转换。如果从数据源获取的数据已经是XML格式则无须转换。
  • 定义一个钩子方法is_not_xml_data() 来对数据转换方法进行控制。

在这里插入图片描述

"""模板方法模式:钩子方法示例"""### 抽象类class DataViewer:"""数据图表显示"""def get_data(self):"""基本,抽象方法:获取数据"""raise NotImplementedErrordef convert_data(self):"""基本,具体方法:数据转换"""print("将数据转换为XML格式。")def display_data(self):"""基本,抽象方法:显示数据"""raise NotImplementedErrordef is_not_xml_data(self) -> bool:"""钩子方法"""return Truedef process(self):"""模板方法"""self.get_data()if self.is_not_xml_data():self.convert_data()self.display_data()### 具体子类class BarChartViewer(DataViewer):"""柱状图"""def get_data(self):print("从 XML 文件中获取数据。")def display_data(self):print("以柱状图显示数据。")def is_not_xml_data(self) -> bool:"""覆盖父类的钩子方法"""return False
  • 客户端代码
### 客户端代码
if __name__ == "__main__":viewer: DataViewer = BarChartViewer()viewer.process()
  • 输出结果
从 XML 文件中获取数据。
以柱状图显示数据。

您正在阅读的是《设计模式Python版》专栏!关注不迷路~

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词