23设计模式之模板方法(TemplateMethod)
来源:互联网 发布:学软件软件好的学校 编辑:程序博客网 时间:2024/05/18 02:35
返回目录
1 概述
TemplateMethod属于行为型模式中的一种,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
2 适用性
- 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
- 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
- 控制子类扩展。
3 参与者
- AbstractClass:定义抽象的原语操作(primitiveoperation),具体的子类将重定义它们以实现一个算法的各步骤。实现一个模板方法,定义一个算法的骨架。该模板方法不仅调用原语操作,也调用定义在AbstractClass或其他对象中的操作。
- ConcreteClass:实现原语操作以完成算法中与特定子类相关的步骤。
4 类图
5 代码实现
//// YJTemplateMethod.swift// DesignPattern//// CSDN:http://blog.csdn.net/y550918116j// GitHub:https://github.com/937447974/Blog//// Created by yangjun on 15/11/27.// Copyright © 2015年 阳君. All rights reserved.//import Cocoa/// Template定义抽象的原语操作,具体的子类将重定义它们以实现一个算法的各步骤。private class Template { // MARK: 子类实现 func println() { } // MARK: 原始方法 func update() { print("开始打印") for (var i = 0; i < 3; i++) { self.println() } }}/// TemplateConcrete实现原语操作以完成算法中与特定子类相关的步骤private class TemplateConcrete: Template { override func println() { print("这是子类的实现") }}// MARK: - /// 模板方法class YJTemplateMethod: YJTestProtocol { func test() { let temp: Template = TemplateConcrete() temp.update() }}
其他
源代码
Framework
文档修改记录
版权所有
CSDN:http://blog.csdn.net/y550918116j
GitHub:https://github.com/937447974/Blog
0 0
- 23设计模式之模板方法(TemplateMethod)
- 23设计模式之模板方法(TemplateMethod)
- 设计模式之模板方法模式(TemplateMethod)
- 设计模式之七、模板方法模式TemplateMethod
- 设计模式入门之模板方法模式TemplateMethod
- 设计模式 -- 模板方法模式 TemplateMethod
- C++设计模式-TemplateMethod模板方法模式
- C++设计模式-TemplateMethod模板方法模式
- 设计模式 模板方法模式 TemplateMethod
- 设计模式之模板模式-TemplateMethod
- TemplateMethod模板方法模式
- TemplateMethod模板方法模式
- 模板方法模式(TemplateMethod)
- TemplateMethod 模板方法模式
- TemplateMethod模板方法模式之应用
- 设计模式-行为设计模式:模板方法设计模式 TemplateMethod
- 设计模式之 templatemethod
- "围观"设计模式(18)--行为型之模板方法模式(TemplateMethod Pattern)
- HashMap Hashtable区别
- 23设计模式之命令模式(Command)
- ScrollView嵌套ListView只显示一行解决方案
- 关于Java多线程Thread的join用法
- 搭建ionic环境创建新的工程
- 23设计模式之模板方法(TemplateMethod)
- 将博客搬至CSDN
- Java 中InputStream与Reader的区别
- java如何获取MySql数据库的列名,类型等信息
- 23设计模式之目录
- curl库移植,配置编译器和编译参数
- nohup、&、setsid、fork和fg、bg究竟有啥区别?
- AIDL实例:当服务端有新书到来时,就通知每一个已经申请提醒功能的用户
- 23设计模式之桥接模式(Bridge)