
设计模式之模板模式学习笔记
发布日期:2021-05-06 23:31:40
浏览次数:23
分类:精选文章
本文共 1704 字,大约阅读时间需要 5 分钟。
前言
相信大家都写过各种各样的文档,需求文档、设计文档、使用手册等等。为了提高复用性和灵活度,需要采用一系列的模板来应对。
定义
定义一个操作中的算法框架,将一些步骤延迟到子类中,使子类不改变一个算法的结构即可重新定义算法的某些特定步骤
结构图
角色拆解分析:
举栗实现
封装固定的流程,第一步是什么,第二步是什么,这些都在抽象类中定义好。子类可以有不同的算法实现,在算法框架不被修改的前提下,实现某些步骤的算法的替换。这里还以迈腾举栗,迈腾的生产要安装发动机模块、中控模块、座椅模块…
1.创建AbstractClass抽象类,定义算法框架public abstract class AbstractCar { //final防止算法框架被重写 public final void magotan(){ //发动机模块 engine(); //中控模块 screen(); //省略其他模块... } protected abstract void engine(); protected abstract void screen();}
2.ConcreteClass具体实现类
迈腾从乞丐版到顶配版,中间包含了多种配置类型,其中以230为代表的乞丐版只搭配了EA211发动机和一个小窄屏(德原朗乞丐版送一个大众原厂手机支架…),高配搭配了EA888发动机和德赛西威187b。虽然实现不同,但是模板都是一样的,往上一怼就装上了。 先看看乞丐版迈腾是什么配置的:public class LowMagotan extends AbstractCar { @Override protected void engine() { System.out.print("乞丐版迈腾装配了一台EA211的1.4T涡轮增压发动机"); } @Override protected void screen() { System.out.print("乞丐版迈腾装配的屏幕太小了..."); }}
再看看高配迈腾:
public class HighMagotan extends AbstractCar { @Override protected void engine() { System.out.print("高配迈腾搭载了一台EA888发动机"); } @Override protected void screen() { System.out.print("高配迈腾搭载了一块德赛西威187b的中控屏"); }}
3.客户端调用
分别启动高配、低配迈腾的组装方法,安装发动机、中控等…
public class Client { public static void main(String []args){ HighMagotan highMagotan = new HighMagotan(); highMagotan.magotan(); LowMagotan lowMagotan = new LowMagotan(); lowMagotan.magotan(); }}
优缺点对比
优点:
1.把不变的方法移动到超类,去除了子类的重复代码 2.子类实现的某些细节,方便拓展 缺点: 1.每个实现都需要定义一个子类,会使类变得更多,设计越来越抽象使用场景
1.多个子类有共有方法,并且逻辑基本相同
2.需要子类来决定父类中算法的某个步骤是否执行,实现子类对父类的反向控制 3.面对核心算法,可以将其设定为模板方法,周边功能由子类去实现发表评论
最新留言
不错!
[***.144.177.141]2025年04月02日 12时16分46秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
工作半年的思考
2019-03-06
不可思议的纯 CSS 滚动进度条效果
2019-03-06
【CSS进阶】伪元素的妙用--单标签之美
2019-03-06
开始CN的生活
2019-03-06
惊闻NBC在奥运后放弃使用Silverlight
2019-03-06
IE下尚未实现错误的原因
2019-03-06
创建自己的Docker基础镜像
2019-03-06
HTTP 协议图解
2019-03-06
Python 简明教程 --- 20,Python 类中的属性与方法
2019-03-06
Python 简明教程 --- 21,Python 继承与多态
2019-03-06
KNN 算法-理论篇-如何给电影进行分类
2019-03-06
Spring Cloud第九篇 | 分布式服务跟踪Sleuth
2019-03-06
CODING 敏捷实战系列课第三讲:可视化业务分析
2019-03-06
使用 CODING DevOps 全自动部署 Hexo 到 K8S 集群
2019-03-06
工作动态尽在掌握 - 使用 CODING 度量团队效能
2019-03-06
CODING DevOps 代码质量实战系列最后一课,周四发车
2019-03-06
CODING DevOps 深度解析系列第二课报名倒计时!
2019-03-06
CODING DevOps 线下沙龙回顾二:SDK 测试最佳实践
2019-03-06
翻译:《实用的Python编程》03_01_Script
2019-03-06
数据结构第八节(图(下))
2019-03-06