延安市建设厅网站,广州智能建站,临沂市建设工程多图联审系统 网站,苏州公司建设网站制作1、模板方法模式定义
定义一个操作中的算法的框架#xff0c;而将一些步骤延迟到子类中#xff0c;使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。 子类实现的具体方法叫作基本方法#xff0c;实现对基本方法高度的框架方法#xff0c;叫作模板方…1、模板方法模式定义
定义一个操作中的算法的框架而将一些步骤延迟到子类中使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。 子类实现的具体方法叫作基本方法实现对基本方法高度的框架方法叫作模板方法。
2、模板方法模式的优点
可变的部分可以充分扩展不变的步骤可以充分封装 提取公共代码减少冗余代码便于维护 具体过程可以定制总体流程方便掌控 使用模板方法可以将代码的复用最大化 子类只需要实现自己的方法将算法和实现的耦合降低。
3、模板方法模式的使用场景
子类中有公有的方法并且逻辑基本相同可以使用模板模式。
4、模板方法模式的缺点
在抽象类中定义了子类的方法即子类对父类产生了影响部分影响了代码的可读性。
5、举例说明
未使用模板模式
class TestPaperA(object):def question(self):print(题目)def answer(self):print(答案A)class TestPaperB(object):def question(self):print(题目)def answer(self):print(答案B)if __name__ __main__:print(试卷1)t1 TestPaperA()t1.question()t1.answer()print()print(试卷2)t2 TestPaperB()t2.question()t2.answer()
结果
试卷1
题目
答案A试卷2
题目
答案B
使用模板模式提取公共函数
class NewPaper(object):def question(self):print(题目)class TestPaperA(NewPaper):def question(self):print(题目)def answer(self):print(答案A)class TestPaperB(NewPaper):def question(self):print(题目)def answer(self):print(答案B)if __name__ __main__:print(试卷1)t1 TestPaperA()t1.question()t1.answer()print()print(试卷2)t2 TestPaperB()t2.question()t2.answer()
结果
试卷1
题目
答案A试卷2
题目
答案B
6、模板模式结构说明 NewPaper是抽象类定义抽象模板并实现了抽象模板方法TestPaper实现父类的一个或多个抽象方法。
当不变和可变的行为在子类的方法中混合在一起时不变的行为就会在子类中重复出现通过模板方法模式把这些行为搬到单一的地方帮助子类摆脱重复的不变行为的纠缠。