一、什么是模板方法模式

算法骨架的封装

使用一个算法骨架,确定算法流程,具体步骤可变化的部分交给子类实现,这样子类就可以不改变算法骨架流程,重定义部分具体步骤的实现.

UML图


AbstractTemplate:抽象类。用来定义算法骨架和原语操作,在这个类里面,还可以提供算法中通用的实现
ConcreteClass:具体实现类。用来实现算法骨架中的某些步骤,完成跟特定子类相关的功能。

二、适用场景

那些具备相同实现步骤,只有个别实现内容不同的情况很适用,比如登录系统,需要获取登录的账号密码,需要对这些进行检测, 检测就是公共的算法步骤,而输入账号密码就是不同的实现.再比如继承中的初始化,初始化的内容有绑定父物体,给定位置,加载资源, 所有子物体的父物体和位置都是确定的是不变的,但加载的资源会有变化, 这一系列就是固定算法骨架,只有加载资源会有所变化.需要控制子类扩展的情况。模板方法模式会在特定的点来调用子类的方法,这样只允许在这些点进行扩展

三、优缺点

优点
封装算法,减少重复,框架性强
缺点
骨架算法不易修改

四、大话中的例子

金庸武侠小说知识考试题;试卷的题目大家都是一样的但是作答会有所不同.题目和答案就是一个固定的流程,这里封装成算法骨架,只是答案的实现交给子类去实现.父类中的作答方法,包含了题目了一个待重写的答案方法,子类去重写这个答案方法,当客户端调用子类中的作答方法,会自动执行题目展示和答案展示.

五、我的例子

using System;namespace TemplateMethodMode
{class Program{static void Main(string[] args){Ninja ninja = new Kiba("牙");ninja.GoOutReady();Console.WriteLine("==============================");ninja = new Shizune("静音");ninja.GoOutReady();Console.ReadKey();}}public abstract class Ninja{string _name;public Ninja(string name){_name = name;}public void GoOutReady(){Console.WriteLine("{0}起床了", _name);Console.WriteLine("刷牙洗脸");Console.WriteLine("吃早餐");Console.WriteLine("带上了{0}", TakeEquipment());Console.WriteLine("系上护额");}public abstract string TakeEquipment();}public class Kiba : Ninja{public Kiba(string name) : base(name){}public override string TakeEquipment(){return "赤丸";}}public class Shizune : Ninja{public Shizune(string name) : base(name){}public override string TakeEquipment(){return "豚豚";}}}
运行结果


PS:这个例子可能不能很好地说明什么,是为了举例子而举例子,但起码用法是掌握了,就是在父类中(不一定是父类)定义一个固定的算法流程,这就是算法骨架,然后 里面的某一步或几步,是可能发生变化的,这部分变化就放到子类里面.这个模板方法模式是一个常用模式,在没学习的时候也可能无意中使用到了它的思想,----封装算法骨架,推迟具体实现.

大话设计模式:模板方法模式相关推荐

  1. linkin大话设计模式--模板方法模式

    linkin大话设计模式--模板方法模式 准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不 ...

  2. 大话设计模式—模板方法模式

    在模板方法模式(TemplateMethod Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计模式属于 ...

  3. linkin大话设计模式--常用模式总结

    linkin大话设计模式--常用模式总结 一,常用设计模式定义 Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. Adapter( ...

  4. 在一个程序设计里,不同的功能窗口有着相似的功能实现方式,可采用设计模式---模板方法模式

        前段时间学习了一些设计模式,最近在做项目的过程中恰巧用到了其中的一个--模板方法模式.这个模式在程序设计过程中可是为小编省去了不少的代码量呢.具体是怎样应用的呢?接下来小编为您分享. 前面博文 ...

  5. 『设计模式』瑞幸咖啡还是星巴克,一杯下午茶让我明白 设计模式--模板方法模式(Template Method Pattern)

    23种设计模式+额外常用设计模式汇总 (持续更新) 简介 Define the skeleton of an algorithm in an operation,deferring some step ...

  6. 『设计模式』设计模式--模板方法模式

    23种设计模式+额外常用设计模式汇总 (持续更新) 简介 Define the skeleton of an algorithm in an operation,deferring some step ...

  7. 行为型设计模式---模板方法模式

    设计模式 序号 内容 链接地址 1 设计模式七大原则 https://blog.csdn.net/qq_39668819/article/details/115390615 2 创建型设计模式–工厂模 ...

  8. Java设计模式-模板方法模式详解

    Java设计模式-模板方法模式 文章目录 Java设计模式-模板方法模式 0.前言 1.模板方法原理 2.模板方法模式中的角色 3.模板方法模式的UML类图 4.代码实现 5.编码测试 6.模板模式中 ...

  9. Java设计模式 - 模板方法模式

    Java设计模式 - 模板方法模式 定义一个算法的骨架,并将一些步骤通过子类表达. UML图示 要点 1. 定义一个算法的骨架 - 建立一个抽象类 2. 将一些步骤通过子类表达 - 子类继承抽象类 赋 ...

最新文章

  1. codeception (4)Yii2下创建Acceptance Tests(验收测试)
  2. [恢]hdu 2014
  3. 浅谈python语言_浅谈Python语言基础知识点!
  4. Redis 集群规范
  5. [Linux]阿里云免费试用体验(在阿里云的ubuntu上部署个人服务)
  6. 网络流优化:-1优化与当前弧优化
  7. request用法_3分钟短文:说说Laravel页面会话之间的数据保存Session用法
  8. 【转】linux /centos 中OpenSSL升级方法详解
  9. 基础数据类型{dict:'字典'}
  10. 研究生做java如何发论文_研究生三年, 我是如何在CSSCI期刊上发表5篇论文,挣得2万元国家奖学金的?...
  11. Android之Activity界面劫持反劫持
  12. 地理坐标(经纬度坐标)和屏幕坐标(xy坐标)间的转换
  13. 基于CAJViewer的学术文献使用技巧
  14. 高仿淘宝首页 - 刚把CSS和JS弄出成了外部,原本写的时候都在HTML一个文件里哈
  15. js 剩余时间,包括天数,小时,分数,秒
  16. 从零开始做小程序(四)—— 自定义顶部导航栏
  17. IE编程1(.net)——读取IE窗口信息
  18. 生物计算机公式,高中生物公式大全.pdf
  19. 学生动物网页设计模板下载 大学生宠物HTML网页制作作品 简单宠物狗网页设计成品 dreamweaver学生网站模板
  20. DSS部署-12、DSS安装

热门文章

  1. 中国石油大学(北京)-《安全与生活》在线考试
  2. 勘误《新概念》III
  3. Mac下编写C或C++
  4. python研究背景和意义_选题背景、目的及研究意义
  5. 基于python的股票客户流失数据分析模型
  6. 患上糖尿病,为什么要做OCT眼底照相检查?
  7. 《老鹰抓小鸡》将代表中国动画电影走出国门,走向世界,yyds❤
  8. SSD: Single Shot MultiBox Detector 模型fine-tune和网络架构
  9. MATLAB将数据存在TXT文件中
  10. python使用influxdb-client连接InfluxDB