swift设计模式学习 - 模板方法模式

时间:2022-08-31 15:45:39

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

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

模板方法模式

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

模板方法模式的基本实现

swift设计模式学习 - 模板方法模式

上图是基本模板模式的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和代码:

swift设计模式学习 - 模板方法模式

// 表格的模板
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. swift设计模式学习 - 策略模式

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

  4. 设计模式学习--复合模式(Compound Pattern)

    设计模式学习--复合模式(Compound Pattern) 概述 ——————————————————————————————————————————————————— 2013年8月4日<H ...

  5. 乐在其中设计模式&lpar;C&num;&rpar; - 模板方法模式&lpar;Template Method Pattern&rpar;

    原文:乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 模板方法模式(Template Method ...

  6. 折腾Java设计模式之模板方法模式

    博客原文地址:折腾Java设计模式之模板方法模式 模板方法模式 Define the skeleton of an algorithm in an operation, deferring some ...

  7. 设计模式学习--迭代器模式&lpar;Iterator Pattern&rpar;和组合模式(Composite Pattern&rpar;

    设计模式学习--迭代器模式(Iterator Pattern) 概述 ——————————————————————————————————————————————————— 迭代器模式提供一种方法顺序 ...

  8. js设计模式——6&period;模板方法模式与职责链模式

    js设计模式——6.模板方法模式与职责链模式 职责链模式

  9. 设计模式&lpar;九&rpar;&colon; 从醋溜土豆丝和清炒苦瓜中来学习&quot&semi;模板方法模式&quot&semi;&lpar;Template Method Pattern&rpar;

    今天是五.四青年节,祝大家节日快乐.看着今天这标题就有食欲,夏天到了,醋溜土豆丝和清炒苦瓜适合夏天吃,好吃不上火.这两道菜大部分人都应该吃过,特别是醋溜土豆丝,作为“鲁菜”的代表作之一更是为大众所熟知 ...

随机推荐

  1. 【异常】Caused by&colon; java&period;lang&period;ClassNotFoundException&colon; org&period;springframework&period;dao&period;DataIntegrityViolationException

    Caused by: java.lang.ClassNotFoundException: org.springframework.dao.DataIntegrityViolationException ...

  2. mac os 系统密码正确的 但是进不了系统

    今天开始重新学习C 但是一早起来开机进不了系统 密码明明正确的 无语了,后来打苹果售后电话解决了. 今天记录下如何解决的,以后万一又出现这种问题,至于原因嘛 我也不知道 有可能跟我装的双系统有关系.只 ...

  3. varchar和Nvarchar的区别

    (1)varchar(N) 存储时 N的单位是字节  比如说varchar(2)  代表的是  该字段可以存储字节长度为2的数据 例子:可以添加  张 或者 ab  添加成功! 但添加的时候如果是: ...

  4. Kotlin 初窥门径&lbrack;2&rsqb;&colon;流程控制

    流程控制语句是编程语言中的核心之一.可以分为分支语句.循环语句和跳转语句.本文将详细介绍一下 Kotlin 中的流程控制语句. If 表达式 在Kotlin中一切都是表达式,也就是说一切都返回一个值. ...

  5. iOS开发-OC中TabView的编辑

    UITableView编辑 1> UITableView 编辑流程 2> UITableView 编辑步骤(四步) ① 第一步 : 让 TableView 处于编辑状态(在按钮点击事件方法 ...

  6. wait event &amp&semi; wake up

    在linux驱动中一个常用的场景, 驱动需要等待中断的响应, 才得以执行后续的代码,达到一个原子操作的目的 /* 静态申请队列 */ static DECLARE_WAIT_QUEUE_HEAD(s_ ...

  7. 【easy】168&period; Excel Sheet Column Title 171&period; Excel Sheet Column Number

    class Solution { public: string convertToTitle(int n) { ) { return ""; } ) / ) + () % + 'A ...

  8. efcore migration

    实体------->migration------->db ---------------------------------------------------------------- ...

  9. dede调用多级导航的方法

    <div id="navWrapper"> <div class="content"> <ul class="nav m ...

  10. 【学习笔记】--- 老男孩学Python,day18 面向对象------ 属性&comma;类方法&comma;静态方法

    属性 属性: 将方法伪装成一个属性,代码上没有什么提升,只是更合理. 应用场景: 类中 要用名词时候可以用@property  比如,求面积,周长,平方,体脂 等运算时候 例如:   bmi是名词,最 ...