博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之—模版方法模式
阅读量:6413 次
发布时间:2019-06-23

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

1.模版方法的定义

模版方法的英文定义为:

Template Method Pattern: Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.

翻译过来的意思是:

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

这种模式在我们开发中经常会用到,一个简单的例子,我们在抽象类中定义若干个基本的操作,在具体的实现类中定义模版方法对基本方法实现聚合。这种实现方式就可以称为模版方法模式

2.模版方法通用模版

对于程序员来说,一天的工作中有很多个基本的工作项目组成,其中包括:签到、早会、需求讨论、功能开发、链调、午饭、bug修复等几项基本工作内容组成。而对于每一个人每天的工作流程又是不一样的,针对此功能,可以设计出以下类图:

929184-20180826185144892-964545344.png

基本方法:

其中签到、早会等基本工作项

模版方法:

模版方法为基本方法的不同组合,从而完成不同的逻辑,可以针对不同的组合定义不同的模版类,也可以在同一个类中实现不同的组合。

代码如下:

public abstract class WorkAbstractService {    protected void sign(){        //签到    }    protected void morningMeeting(){        //早会    }    protected void requirementsDiscussion(){        //需求讨论    }    protected void develop(){        //功能开发    }    protected void eat(){        //午饭    }    protected void debug(){        //联调    }    protected void fixBug(){        //修复bug    }}public class WorkServiceImpl extends WorkAbstractService{    public void workFlow1(){        //签到-早会-需求讨论-午饭-开发-联调-修复bug        sign();        morningMeeting();        requirementsDiscussion();        eat();        develop();        debug();        fixBug();    }    public void workFlow2(){        //签到-需求讨论-开发-午饭-联调-修复bug        sign();        requirementsDiscussion();        develop();        eat();        develop();        fixBug();    }}

3.模版方法的优缺点

优点:

1.封装不变部分,扩展可变部分2.提取公共功能部分,便于维护

4.模版方法的使用场景

1.多个子类有公共的方法,并且逻辑基本相同2.重构的时候,模版方法是一个经常使用的模式,把相同的代码提取到父类中,然后通过钩子函数约束其行为。

转载于:https://www.cnblogs.com/vitasyuan/p/9538249.html

你可能感兴趣的文章
一起谈.NET技术,.Net Framework源代码中的模式之Prototype(原型模式)
查看>>
[shell 命令] find 查找文件
查看>>
windows下启动mysql服务的命令行启动和手动启动方法
查看>>
VTK三维点集轮廓凸包提取
查看>>
【概率论与数理统计】小结9-3 - 区间估计
查看>>
Golang性能调优入门
查看>>
sqlloader外部表
查看>>
golang笔记——数组与切片
查看>>
屏蔽可忽略的js脚本错误
查看>>
【Vue】vue.js常用指令
查看>>
NFS学习
查看>>
MySql常用命令总结
查看>>
又一年...
查看>>
Linux VFS
查看>>
ext不能选中复制属性_如何实现Extjs的grid单元格只让选择(即可以复制单元格内容)但是不让修改?...
查看>>
python中print的作用*8、不能+8_在 Python 3.x 中语句 print(*[1,2,3]) 不能正确执行。 (1.0分)_学小易找答案...
查看>>
python 生成html代码_使用Python Markdown 生成 html
查看>>
axure如何导出原件_Axure 教程:轻松导出图标字体所有图标
查看>>
laravel input值必须不等于0_框架不提供,动手造一个:Laravel表单验证自定义用法...
查看>>
cad填充图案乱理石_太快了吧!原来大神是这样用CAD图案填充的
查看>>