博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大战设计模式【11】—— 模板方法模式
阅读量:5891 次
发布时间:2019-06-19

本文共 858 字,大约阅读时间需要 2 分钟。

模板方法模式(Template Method)

 

设计模式使用的例子

 

一、定义

定义一个操作中算法的框架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的特定步骤。

 

二、结构

AbstractClass(抽象类):在抽象类中定义了一系列基本操作(Primitive Operations)

这些基本操作可以是具体的,也可以是抽象的,每一个基本操作对应算法的一个步骤,在其子类中可以重新定义或实现这些步骤。

同时,在抽象类中实现了一个模板方法(Template Method),用于定义一个算法的框架。

ConcreteClass(具体子类):抽象类的子类,用于实现在父类中声明的抽象基本操作以完成子类特定算法的步骤,也可以覆盖在父类中已经实现的具体基本操作。

 

三、优点

模板方法中可以通过子类来覆盖父类的基本方法,不同的子类可以提供基本方法的不同实现,更换和增加新的子类很方便,符合单一职责和开闭原则。

 

四、缺点

需要为每一个基本方法的不同实现一个子类,如果父类中可变的基本方法太多,将会导致类的个数增加,系统更加庞大,设计也会更加抽象。

 

五、应用场景

对一些复杂的算法进行分割,将其算法中固定不变的部分设计为模板方法和父类具体方法,而一些可以改变的细节由其子类来实现。

需要通过子类来决定父类算法中某个步骤是否执行,实现子类对父类的反向控制。

 

六、个人总结

1、模板方法模式的实现步骤:

将两个具有相同算法结果方法的类提出公共的部分

将算法固定不变的部分设计为模板

父类抽象一些必须由子类重写的方法

父类实现一些一定不需要子类重写的方法

父类实现一些方法,子类可以重写,也可以不重写(称为钩子hook)

2、模板方法模式的重点就是提出了公共的部分(模板)

这个设计模式的优点在于父类对可以通过控制方法重写的权限来控制子类;子类可以通过是否重写方法来控制父类中的模板;

3、模板方法模式的长相很多,符合上述描述的都可以称为模板方法,所以很多时候模板方法被使用了但不知道被使用了

转载地址:http://zwfsx.baihongyu.com/

你可能感兴趣的文章
oracle ORA-00917: missing comma 是因为少逗号
查看>>
策略模式简介
查看>>
UIViewController中loadView的用法(应当注意的几点)
查看>>
POJ NOI0105-42 画矩形
查看>>
Java 数组在内存中的结构
查看>>
《关爱码农成长计划》第一期报告
查看>>
entity framework 6 通用数据类
查看>>
读取FTP上的excel文件,并写入数据库
查看>>
vs2008快捷键极其技巧 转载
查看>>
window 7上安装Visual Studio 2017失败的解决方法
查看>>
JavaScript 正整数正则表达式
查看>>
单元测试之Stub和Mock
查看>>
【转】Java泛型-类型擦除
查看>>
PredictionIO+Universal Recommender快速开发部署推荐引擎的问题总结(2)
查看>>
【232】◀▶ IDL显示地理图像
查看>>
【116】Windows 系统组合键
查看>>
学习进度表 04
查看>>
python---__getattr__\__setattr_重载'.'操作
查看>>
谈谈javascript中的prototype与继承
查看>>
时序约束优先级_Vivado工程经验与各种时序约束技巧分享
查看>>