前言

相信大家都写过各种各样的文档,需求文档、设计文档、使用手册等等。为了提高复用性和灵活度,需要采用一系列的模板来应对。

定义

定义一个操作中的算法框架,将一些步骤延迟到子类中,使子类不改变一个算法的结构即可重新定义算法的某些特定步骤

结构图

角色拆解分析:
1.AbstractClass:抽象类,定义了一套算法框架
2.ConcreteClass:具体实现类

举栗实现

封装固定的流程,第一步是什么,第二步是什么,这些都在抽象类中定义好。子类可以有不同的算法实现,在算法框架不被修改的前提下,实现某些步骤的算法的替换。这里还以迈腾举栗,迈腾的生产要安装发动机模块、中控模块、座椅模块…
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 {@Overrideprotected void engine() {System.out.print("乞丐版迈腾装配了一台EA211的1.4T涡轮增压发动机");}@Overrideprotected void screen() {System.out.print("乞丐版迈腾装配的屏幕太小了...");}
}

再看看高配迈腾:

public class HighMagotan extends AbstractCar {@Overrideprotected void engine() {System.out.print("高配迈腾搭载了一台EA888发动机");}@Overrideprotected 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.面对核心算法,可以将其设定为模板方法,周边功能由子类去实现

设计模式之模板模式学习笔记相关推荐

  1. 设计模式之建造者模式学习笔记

    前言 建造者模式也叫生成器模式,是创建一个复杂对象的创建型模式,将此创建过程和部件解耦,使其构建过程和部件的表示分离开. 解释 建造者模式,说白了就是"攒机".比方说我想要定制一台 ...

  2. 设计模式之策略模式学习笔记

    前言 我想大家都加班写过"业务代码",一大堆的if else,甚至if里面套if-代码不得已变得十分臃肿,对应的维护成本也有所增加.而策略模式,就是为了解决违反了开放封闭原则的这一 ...

  3. 设计模式之外观模式学习笔记

    简介 外观模式,也叫门面模式.隐藏了系统内部的复杂,向客户端提供了一个接口可以访问. 定义 一个子系统的外部和内部通信,必须通过一个统一的对象.该模式提供一个高层接口,使子系统更易使用. 结构图 角色 ...

  4. 设计模式之代理模式学习笔记

    前言 代理模式,也叫做委托模式.就好比请律师打官司一样,为其他对象提供一种代理,来控制对这个对象的访问. 结构图 接下来我们对以上结构图拆解,进行角色分析: 1.Subject:抽象主题类,声明真实主 ...

  5. 23种设计模式之工厂模式学习笔记

    什么是工厂模式? 工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式.该模式用于封装和管理对象的创建,是一种创 ...

  6. 设计模式 - 行为型 - 模板模式学习

    现象: 设计模式 - 行为型 - 模板模式学习 介绍: 模板模式的设计思路,在抽象类中定义抽象方法的执行顺序, 并将抽象方法设定为只有子类实现,但不提供独立访问的方法 只能通过已经被安排好的定义方法去 ...

  7. GO 编程模式学习笔记——GO GENERATION

    GO编程模式学习笔记系列为学习陈皓的GO编程模式系列文章记录与心得. 原文链接:GO 编程模式:GO GENERATION Go语言代码生成主要还是用来解决编程泛型的问题.Go语言的类型检查有两种技术 ...

  8. 金庸小说考试之模板方法模式学习笔记[C++版]

    /************************************************************************ * 模板方法模式学习笔记[C++] * Author ...

  9. Windows保护模式学习笔记(十四)—— 阶段测试

    Windows保护模式学习笔记(十四)-- 阶段测试 题目一 解题步骤 题目二 解题步骤 题目一 描述:给定一个线性地址,和长度,读取内容 int ReadMemory(OUT BYTE* buffe ...

最新文章

  1. hdu 4605 Magic Ball Game (在线主席树/离线树状数组)
  2. 用php表示0123,php易错笔记-类型
  3. 【全网最全的博客美化系列教程】06.推荐和反对炫酷样式的实现
  4. Python切片中的误区与高级用法
  5. 64位win10+cuda8.0+vs2013+cuDNN V5下Caffe的编译安装教程并配置matlab2014a 接口
  6. Flume 1.7 源码分析(一)源码编译
  7. 计算机应用基础课程基本要求,计算机应用基础课程标准
  8. github基本使用教程
  9. 基于PCDN技术的无延时直播方案
  10. 专访黄翀:东方航空到底用MongoDB做了什么,技术选型为何花落MongoDB?
  11. 95-130-020-源码-source-SourceFunction
  12. VMWare16下载安装Centos7镜像教程,详细记录
  13. html编写代码制作网站教程,html代码编写教程
  14. 分享!手机浏览器一键跳转微信加好友的方法
  15. 基督里一切的丰盛_司布真
  16. The APR based Apache Tomcat Native library which allows optimal performance in production
  17. 模仿360安全卫士项目笔记8
  18. 第1题:设计一个学生学籍管理系统
  19. 2015.7.11 SDN南京技术交流会
  20. Android开发之打包APK详解

热门文章

  1. python读书报告_读书笔记 Python编程入门
  2. webpack4配置详解
  3. 世界级光伏产业集群落地合肥
  4. 2016搜狗:矩阵元素相乘
  5. UStore-自定义JDF文件格式输出
  6. 杭电1754--I Hate It(线段树)
  7. css(hr元素)水平线的定位
  8. linux learning site
  9. java.util.concurrent.locks.Condition 例子程序探讨
  10. [Redis]Redis章2 Redis 持久化