算法|优秀程序员必备技能:设计模式之——模板模式
文章图片
文章图片
文章图片
文章图片
基本介绍模板模式也被称为“模板方法模式” , 该模式是行为型模式的一种 , 模板模式相对来说比较简单也比较容易理解 。
该模式的实现思路是:在一抽象类中定义一个公开的模板方法 , 该方法规定了某一算法(也可称为功能)的执行流程 , 其子类可以按照需求重写类中的其它方法 , 但是整个算法将以模板方法定义的流程进行 。
换言之 , 模板方法规定了一个算法的整体骨架(执行流程) , 并将一些具体步骤延迟到子类中 , 从而促使子类可以在不改变算法结构的前提下 , 就能做到重新定义该算法的一些特定操作 。
通常情况下我们会在模板方法所在的父类中定义一个方法 , 该方法默认不做任何事情 , 子类可以根据自身情况重写它 , 此方法被称为“钩子方法” 。 钩子方法在模板模式中可有可无 , 不是必须存在的 。
模板模式的UML类图
类图讲解
AbstractClass:抽象父类 , 定义并实现了模板方法 , 规定好了算法的执行流程 。 该类中也会存在一些其它抽象方法 , 用于让子类定制属于自己的特殊操作 。案例讲解咖啡制作
ConcreteClassA、ConcreteClassB:继承AbstractClass抽象类并实现该类中的抽象方法 。
Client:客户端测试类 。
流程:挑选咖啡豆 => 研磨 => 冲泡 => 添加配料 。代码实现
配料:牛奶、糖 。
咖啡 => 对应AbstractClass
抽象父类图一
抽象父类图二
不同口味的咖啡 => 对应AbstractClass的子类
子类图一
子类图二
客户端测试类
执行结果
总结1、算法(流程)只存在于父类中 , 这样有利于对算法的修改与维护 , 只要变更父类就可以使其子类继承相应的修改 。
2、模板模式中父类的模板方法和一些已经实现的方法可以直接被子类使用 , 从而实现代码的最大化复用 。
3、模板模式即统一了算法(流程) , 也提供了很大的灵活性(像上面案例中添加配料一样) 。
4、缺点:每一个不同的实现都需要新增一个子类 , 会导致类的个数增加 , 使系统变得庞大 。
5、注意:父类的模板方法一般都使用final修饰 , 从而防止子类重写 。
6、使用场景:当某一项功能是需要通过执行一系列操作来完成的 , 并且这一系列的操作基本相同 , 只有部分操作存在差异时我们就可以考虑使用模板方法 。
今天的分享就到这里了 , 如果感觉“菜鸟”写的文章还不错 , 记得点赞加关注呦!你们的支持就是我坚持下去的动力 。 文章哪里写的有问题的也希望大家可以指出 , 我会虚心受教 。
【算法|优秀程序员必备技能:设计模式之——模板模式】
- 18项优秀科研成果找“伯乐”
- 28岁程序员狂赚上亿,宣布退休:有钱一时爽,一直有钱一直爽
- 用尽全身力气不想加班的机器人,这大概是程序员最后的倔强,哈哈
- 美国研发新工具可量化AI算法的可信度
- Java函数式编码结构-好程序员
- 自用:HMM隐马尔可夫模型学习笔记(2)-前向后向算法
- 又是一年1024,程序员:我写的算法不足以控制人类
- AI|图灵奖得主姚期智:人工智能算法还需突破哪些瓶颈
- 阿里员工哀叹:公务员真好,每一样都完爆程序员,网友:想得真美
- 算法|堪比旗舰的摄影表现 vivo Y73s拍照体验