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

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

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

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

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

  5. 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)

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

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

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

  7. 设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)

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

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

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

  9. 设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)

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

随机推荐

  1. AWTK 全称为 Toolkit AnyWhere,是 ZLG 倾心打造的一套基于 C 语言开发的 GUI 框架(三平台+2个手机平台+嵌入式)

    最终目标: 支持开发嵌入式软件. 支持开发Linux应用程序. 支持开发MacOS应用程序. 支持开发Windows应用程序. 支持开发Android应用程序. 支持开发iOS应用程序. 支持开发2D ...

  2. Mint linux中调整屏幕亮度的方法

    /*********************************************************************  * Author  : Samson  * Date   ...

  3. linux命令之复制

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zkn_CS_DN_2013/article/details/24464547 语法:cp [选项] ...

  4. PAT 1076 Forwards on Weibo[BFS][一般]

    1076 Forwards on Weibo (30)(30 分) Weibo is known as the Chinese version of Twitter. One user on Weib ...

  5. PAT Spell It Right [非常简单]

    1005 Spell It Right (20)(20 分) Given a non-negative integer N, your task is to compute the sum of al ...

  6. hover()与toggle()

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. MVC前后台获取Action、Controller、ID名方法 以及 路由规则

    前后台获取Action.Controller.ID名方法 前台页面:ViewContext.RouteData.Values["Action"].ToString();//获取Ac ...

  8. [LeetCode] 183. Customers Who Never Order_Easy tag: SQL

    Suppose that a website contains two tables, the Customers table and the Orders table. Write a SQL qu ...

  9. [Leetcode] 863. All Nodes Distance K in Binary Tree_ Medium tag: BFS, Amazon

    We are given a binary tree (with root node root), a target node, and an integer value `K`. Return a ...

  10. Ubuntu 14.04 安装 SteamOS 会话

    如何在Ubuntu 14.04上安装steamos会话,以使用户的SteamOS 大图片模式直接从lightdm GTK迎宾开始进入. SteamOS是一个开源的基于Debian Wheezy分支的. ...