移动端访问不佳,请访问我的个人博客

设计模式学习的demo地址,欢迎大家学习交流

模板方法模式

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

模板方法模式的基本实现

上图是基本模板模式的UML图,这种设计模式在很多地方都有用到,下面是基本实现的代码:

class AbstractClass {func primitiveOperation1() {}func primitiveOperation2() {}func templateMethod() {primitiveOperation1()primitiveOperation2()}
}class ConcreteClassA: AbstractClass {override func primitiveOperation1() {print("具体类A方法1实现")}override func primitiveOperation2() {print("具体类A方法2实现")}
}class ConcreteClassB: AbstractClass {override func primitiveOperation1() {print("具体类B方法1实现")}override func primitiveOperation2() {print("具体类B方法2实现")}
}

模板方法模式解决实际问题(填表格)

在生活中很多地方用到的模板方法模式,比如我们填一份表格,我们要按照表格的模板开始填,只需要填关键部分,而不用将表格的所有文字炒一遍,下面是UML和代码:

// 表格的模板
class TemplateTable {func showTable() {fillName()fillSex()}func fillName() {print("你的名字:\(yourName())")}func fillSex() {print("你的性别:\(yourSex())")}func yourName() -> String {return ""}func yourSex() -> String {return ""}
}// wcl填写的表格
class WCLTable: TemplateTable {override func yourName() -> String {return "wcl"}override func yourSex() -> String {return "male"}
}// scy填写的表格
class SCYTable: TemplateTable {override func yourName() -> String {return "scy"}override func yourSex() -> String {return "female"}
}

下面我们调用一下代码:

let wcl = WCLTable()
wcl.showTable()
let scy = SCYTable()
scy.showTable()

下面是调用的结果:

你的名字:wcl
你的性别:male
你的名字:scy
你的性别:female

模板方法模式的特点

模板方法模式是通过把不变行为搬移到超类,去除子类中重复代码来体现它的优势,它提供了一个很好的代码复用平台。

以上是我对模板方法模式的理解,如果有不对的地方欢迎大家交流,最后谢谢大家的阅读~~

swift设计模式学习 - 模板方法模式相关推荐

  1. swift设计模式学习 - 策略模式

    移动端访问不佳,请访问我的个人博客 设计模式学习的demo地址,欢迎大家学习交流 策略模式 策略模式定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. ...

  2. swift设计模式学习 - 代理模式

    移动端访问不佳,请访问我的个人博客 设计模式学习的demo地址,欢迎大家学习交流 代理模式 代理模式为其他对象提供一种代理以控制对这个对象的访问,在某些情况下,一个对象不适合或者不能直接引用另一个对象 ...

  3. 设计模式学习 — 模板方法模式

    模板方法模式定义 定义一个操作中算法的框架,将一些步骤延迟到子类中.模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 所谓将一些步骤延迟到子类中实现的意思就是子类继承实现父类 ...

  4. Carson带你学设计模式:模板方法模式(Template Method)

    前言 今天Carson来全面总结最常用的设计模式 - 模板方法模式. Carson带你学设计模式系列文章 Carson带你学设计模式:这是一份全面 & 详细的设计模式学习指南 Carson带你 ...

  5. 一篇博客读懂设计模式之---模板方法模式

    设计模式之模板方法模式: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 简而言之就是:父类定义了骨架(调用哪些方法及其 ...

  6. 设计模式:模板方法模式(C++)【喝咖啡还是喝茶】

    模板方法模式介绍 我们在软件设计中经常会有一些步骤是一样的,只是实现不一样,这种情况我们就可以使用模板方法模式.何为模板,就是有固定的步骤,可以复用嘛.来看看模板方法模式:定义一个操作中的算法的骨架, ...

  7. 设计模式之模板方法模式详解

    设计模式之模板方法模式详解 概述 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的 ...

  8. Java设计模式之模板方法模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  9. php templete什么意思,PHP设计模式之模板方法模式定义与用法详解

    本文实例讲述了PHP设计模式之模板方法模式定义与用法.分享给大家供大家参考,具体如下: 什么是模板方法模式 模板方法(Template Method)设计模式中使用了一个类方法templateMeth ...

最新文章

  1. 图片/容器/字体 透明度[opacity:0.4; filter:alpha(opacity=40)]
  2. 利用sendmail搭建邮件服务器
  3. 急速收藏:4套iOS SDK的H5打通方案
  4. Android 设置TextView字体加粗
  5. diskgenius单文件专业版_金蝶KIS专业版系列——系统工具六(业务套打工具)
  6. view-controller标签
  7. 将当前的Git分支设为主分支
  8. SpringBoot蚂蚁课堂-学习笔记
  9. Dispose(bool disposing)模式被破坏
  10. 如何直接修改html文件,如何修改HTML的文件?
  11. 麦子学院字符设备驱动201126
  12. BAPI_PO_CREATE1 创建采购订单
  13. 力扣刷题 DAY_68 回溯
  14. Python之——获取电脑连接过的所有wifi名称和密码
  15. vue+springboot通过post请求实现文件下载
  16. 单相串励电机和三相交流异步电机在高空作业平台中的应用
  17. 认识Android应用开发(一)
  18. 六自由度方程组 matlab,采用Matlab的六自由度机器人三维运动学仿真_李庆.pdf
  19. 财务计算机专业英文怎么说,财务与计算机 英文简历模板
  20. mysql 安装启动服务器一直失败_mysql安装后服务器启动失败的几种解决办法

热门文章

  1. 报告显示,企业福利发放与员工诉求不匹配,福利预算显行业差别
  2. 飞翔的小鸟 Flappy Bird
  3. 【小程序】高校微信小程序应用大赛测试题
  4. excel如何免费批量转换成pdf?这个方法太好用了
  5. 3.为方便旅客,某航空公司拟开发一个机票预订系统。写出问题定义并分析此系统的可行性。
  6. 百度360互攻24小时曾五度交手
  7. rac安装过程中 error while loading shared libraries libpthread.so.0 问题的解决
  8. 让桌面显示windows 10 系统信息
  9. 订货软件-为什么要选择合适的订货软件
  10. Aleo提供的zkCloud:去中心化隐私计算