一、概述
TemplateMethod属于行为型模式中的一种,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
二、适用性
1. 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
2. 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
3.控制子类扩展。
三、参与者
1. AbstractClass:定义抽象的原语操作(primitiveoperation),具体的子类将重定义它们以实现一个算法的各步骤。实现一个模板方法,定义一个算法的骨架。该模板方法不仅调用原语操作,也调用定义在AbstractClass或其他对象中的操作。
2. ConcreteClass:实现原语操作以完成算法中与特定子类相关的步骤。
四、类图
五、代码实现
1. AbstractClass:定义抽象的原语操作(primitiveoperation),具体的子类将重定义它们以实现一个算法的各步骤。实现一个模板方法,定义一个算法的骨架。该模板方法不仅调用原语操作,也调用定义在AbstractClass或其他对象中的操作。
Template.swift
//
// Template.swift
// 23设计模式
//
// Created by 阳君 on 14/12/4.
// Copyright (c) 2014年 六月. All rights reserved.
//
import Foundation
/// Template定义抽象的原语操作,具体的子类将重定义它们以实现一个算法的各步骤。
class Template {
// MARK: 子类实现
func println() {
}
// MARK: 原始方法
func update() {
print("开始打印")
for (var i = 0; i < 3; i++) {
self.println()
}
}
}
2. ConcreteClass:实现原语操作以完成算法中与特定子类相关的步骤。
TemplateConcrete.swift
//
// TemplateConcrete.swift
// 23设计模式
//
// Created by 阳君 on 14/12/4.
// Copyright (c) 2014年 六月. All rights reserved.
//
import Foundation
/// TemplateConcrete实现原语操作以完成算法中与特定子类相关的步骤
class TemplateConcrete: Template {
override func println() {
print("这是子类的实现")
}
}
六、测试
1. 代码
// 模版方法
let temp:Template = TemplateConcrete()
temp.update()
2. 运行结果
开始打印
这是子类的实现
这是子类的实现
这是子类的实现