Python: Template Method Pattern
GeovinDuTemplate.py
# 模板方法模式 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 调用:
# 模板方法模式 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)
输出:
得到为: `text 文件` 跳过转换 [SAVE] `text 文件` 进行处理中 得到为: `pdf 文件` 跳过转换 得到为: `csv 文件` 跳过转换 [SAVE] `csv 文件` 进行处理中 得到为: `xml 文件` 跳过转换 [SAVE] `xml 文件` 进行处理中
ResearchGuideline.py
# 模板方法模式 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
# 模板方法模式 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
# 模板方法模式 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
# 模板方法模式 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
# 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())
输出
大学 A: Step 2 - 应用的大学 A Step 3 - 综合性的大学 A 大学 B: Step 1 - 专业性的大学 B Step 3 - 国防科技的大学 B Step 4 - 工业综合性的大学 B Step 5 - 社会科学的大学 B
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号