Python: Template Method Pattern
GeovinDuTemplate.py
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | # 模板方法模式 Template Method Pattern def get_text(): return "text 文件" """ method to get the xml version of file""" def get_xml(): return "xml 文件" """ method to get the pdf version of file""" def get_pdf(): return "pdf 文件" """method to get the csv version of file""" def get_csv(): return "csv 文件" """method used to convert the data into text format""" def convert_to_text(data): print ( "[CONVERT]" ) return "{} 转为 text" . format (data) """method used to save the data""" def saver(): print ( "[SAVE]" ) """helper function named as template_function""" def template_function(getter, converter = False , to_save = False ): """input data from getter""" data = getter() print ( "得到为: `{}`" . format (data)) if len (data) < = 3 and converter: data = converter(data) else : print ( "跳过转换" ) """saves the data only if user want to save it""" if to_save: saver() print ( "`{}` 进行处理中" . format (data)) |
main.py 调用:
1 2 3 4 5 6 7 8 | # 模板方法模式 Template Method Pattern GeovinDuTemplate.template_function(GeovinDuTemplate.get_text, to_save = True ) GeovinDuTemplate.template_function(GeovinDuTemplate.get_pdf, converter = GeovinDuTemplate.convert_to_text) GeovinDuTemplate.template_function(GeovinDuTemplate.get_csv, to_save = True ) GeovinDuTemplate.template_function(GeovinDuTemplate.get_xml, to_save = True ) |
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 得到为: `text 文件` 跳过转换 [SAVE] `text 文件` 进行处理中 得到为: `pdf 文件` 跳过转换 得到为: `csv 文件` 跳过转换 [SAVE] `csv 文件` 进行处理中 得到为: `xml 文件` 跳过转换 [SAVE] `xml 文件` 进行处理中 |
ResearchGuideline.py
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 | # 模板方法模式 Template Method Pattern ResearchGuideline.py from abc import ABC, abstractmethod # Creating our abstract class: class ResearchGuideline(ABC): # Template Method definition: def templateMethod( self ): # Calling all the steps self .step1() self .step2() self .step3() self .step4() self .step5() # Defining the Template Method Steps def step1( self ): pass def step2( self ): pass @abstractmethod def step3( self ): pass def step4( self ): pass def step5( self ): pass |
GeovinDuuniversityA.py
1 2 3 4 5 6 7 8 9 10 | # 模板方法模式 Template Method Pattern GeovinDuuniversityA.py from researchGuideline import ResearchGuideline class UniversityA(ResearchGuideline): def step2( self ): print ( "Step 2 - 应用的大学 A" ) def step3( self ): print ( "Step 3 - 综合性的大学 A" ) |
GeovinDuuniversityB.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 模板方法模式 Template Method Pattern GeovinDuuniversityB.py from researchGuideline import ResearchGuideline class UniversityB(ResearchGuideline): def step1( self ): print ( "Step 1 - 专业性的大学 B" ) def step3( self ): print ( "Step 3 - 国防科技的大学 B" ) def step4( self ): print ( "Step 4 - 工业综合性的大学 B" ) def step5( self ): print ( "Step 5 - 社会科学的大学 B" ) |
GeovinDuResearchGuide.py
1 2 3 4 5 6 7 8 | # 模板方法模式 Template Method Pattern GeovinDuResearchGuide.py from researchGuideline import * from GeovinDuuniversityA import UniversityA from GeovinDuuniversityB import UniversityB # Auxiliary function def client_call(research_guideline: ResearchGuideline): research_guideline.templateMethod(); |
调用:main.py
1 2 3 4 5 6 7 | # Calling the Template Method using the University A class as parameter print ( "大学 A:" ) GeovinDuResearchGuide.client_call(GeovinDuuniversityA.UniversityA()) # Calling the Template Method using the University A class as parameter print ( "大学 B:" ) GeovinDuResearchGuide.client_call(GeovinDuuniversityB.UniversityB()) |
输出
1 2 3 4 5 6 7 8 | 大学 A: Step 2 - 应用的大学 A Step 3 - 综合性的大学 A 大学 B: Step 1 - 专业性的大学 B Step 3 - 国防科技的大学 B Step 4 - 工业综合性的大学 B Step 5 - 社会科学的大学 B |
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
分类:
Python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!