swift设计模式学习 - 模板方法模式
移动端访问不佳,请访问我的个人博客
设计模式学习的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设计模式学习 - 模板方法模式的更多相关文章
- swift设计模式学习 - 代理模式
移动端访问不佳,请访问我的个人博客 设计模式学习的demo地址,欢迎大家学习交流 代理模式 代理模式为其他对象提供一种代理以控制对这个对象的访问,在某些情况下,一个对象不适合或者不能直接引用另一个对象 ...
- swift设计模式学习 - 原型模式
移动端访问不佳,请访问我的个人博客 设计模式学习的demo地址,欢迎大家学习交流 原型模式 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 定义 用原型实例指定创建对象的种类,并且通 ...
- swift设计模式学习 - 策略模式
移动端访问不佳,请访问我的个人博客 设计模式学习的demo地址,欢迎大家学习交流 策略模式 策略模式定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. ...
- 设计模式学习--复合模式(Compound Pattern)
设计模式学习--复合模式(Compound Pattern) 概述 ——————————————————————————————————————————————————— 2013年8月4日<H ...
- 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
原文:乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 模板方法模式(Template Method ...
- 折腾Java设计模式之模板方法模式
博客原文地址:折腾Java设计模式之模板方法模式 模板方法模式 Define the skeleton of an algorithm in an operation, deferring some ...
- 设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)
设计模式学习--迭代器模式(Iterator Pattern) 概述 ——————————————————————————————————————————————————— 迭代器模式提供一种方法顺序 ...
- js设计模式——6.模板方法模式与职责链模式
js设计模式——6.模板方法模式与职责链模式 职责链模式
- 设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)
今天是五.四青年节,祝大家节日快乐.看着今天这标题就有食欲,夏天到了,醋溜土豆丝和清炒苦瓜适合夏天吃,好吃不上火.这两道菜大部分人都应该吃过,特别是醋溜土豆丝,作为“鲁菜”的代表作之一更是为大众所熟知 ...
随机推荐
- 正则表达式(二):Unicode诸问题上篇(转)
原文:http://www.infoq.com/cn/news/2011/02/regular-expressions-unicode 关于正则表达式的文档很多,但大部分都是英文的,即便有中文的文档, ...
- JavaScript如何实现拖放功能
1.在学习ExtJs时,对其拖放功能感到很陌生,然后找了个拖放功能实现. 转载地址 2.拖拽的基本原理就是根据鼠标的移动来移动被拖拽的元素.鼠标的移动也就是x.y坐标的变化:元素的移动就是style. ...
- eclipse 64和32位切换
JAVA_HOME配置的是JAVA_HOME=D:\Java\32\jdk1.6.0_13
- 编译错误 ----- /usr/bin/ld: cannot find -lc
yum install glibc-static glib-static是Gcc链接时使用到的库.
- Civil and Evil Engineer(普林姆)
http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=198#problem/E 水题一道,题意就是让求一遍最小生成树与最大生成树,但我 ...
- phpstorm中FTP自动同步功能
首先打开PhpStorm软件,新建个项目完成以后,找到Tools, 找到 Tools->Deployment->configruation点击进行设置, 点击configruation ...
- IDA 7.0在Mojava更新后打不开的问题
Mac升级到mojava后,ida 7.0打不开了. 上述是两种典型的窗口,不过不论是出现什么样的弹窗,如果是在升级之后出现的,都要试一下下面的解决办法.因为IDA7.0版本流出的比较多,虽然这个已经 ...
- SpringMyBatisDay01
1.Spring简介 Spring是一个开源轻量级应用开发框架,其目的是用于简化企业级应用程序的开发,降低侵入性Spring提供IOC和AOP功能,可以将组件(就是类)之间的耦合度降至最低,解耦,便于 ...
- html04
web的三要素:HTML:搭建页面的基本结构css: 对页面进行修饰-让页面更美观JavaScript:让页面可以有交互行为(用户和界面)1.js是什么:JavaScript :页面的脚本语言,运行在 ...
- fafu 1413
叉积的运用 ,不断的用叉积去判断 最小的拼图, 刚开始对点进行排序,每个人的排序规则不同做法可能不同,我是按照点的x轴进行x轴相同用y小的在前面,然后每个点按照最下的点开始进行查找 每次从一个点出发然 ...