**定義:**模板方法模式(TemplateMethod Pattern),定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模塊方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
類型:類行為型模式
概述:
???????模板方法模式應該算是所有設計模式中最簡單,卻也是應用得最多的模式了。模板方法模式其實就是多態的體現。
?????????模板方法模式設計的要點是在父類中定義好一個操作中的算法骨架,然后具體實現延遲到子類中。模板方法其實與策略模式有一些類似的地方。不同點是,策略模式將算法抽象出來成為一個新的類,而模板方法則沒有將算法抽象出來。主要體現是策略模式的算法相對復雜一點,而模板方法的算法相對簡單一點。
????????舉例,有一群人,可以按身高排序然后取其中高的一部分;也可以體量排序然后取其中體量適宜的一部分。
類圖:

參與者:
1. People,基類,提供一個模板方法,并且提供抽象的接口。模板方法調用接口完成具體的算法。
1. HighPeople、FatPeople,根據想要完成的情況,來具體實現抽象接口**。**
示例代碼:
~~~
using System;
using System.Collections.Generic;
using System.Text;
namespace Pattern23
{
abstract class People
{
public abstract void Sort();
public abstract void Remove();
public void TemplateMethod()
{
Sort();
Remove();
}
}
class HighPeople : People
{
public override void Sort()
{
Console.WriteLine("按身高排序");
}
public override void Remove()
{
Console.WriteLine("排除掉身高低于170cm的人");
}
}
class FatPeople : People
{
public override void Sort()
{
Console.WriteLine("按體重排序");
}
public override void Remove()
{
Console.WriteLine("排除體量超過80K以及少于60KG的人");
}
}
class Program
{
static void Main(string[] args)
{
People people;
people = new HighPeople();
people.TemplateMethod();
people = new FatPeople();
people.TemplateMethod();
}
}
}
~~~
適用性:
1. 一次性實現一個算法的不變的部分,并將可變的行為留給子類來實現。
1. 各子類中公共的行為應被提取出來并集中到一個公共父類中以避免代碼重復。
首先識別現有代碼中的不同之處,并且將不同之處分離為新的操作。
最后,用一個調用這些新的操作的模板方法來替換這些不同的代碼。
1. 控制子類擴展。
優缺點:
1. 優點,完成新的模板方法是不用修改原有代碼,通過添加新代碼完成。
參考資料:
1. 《設計模式——可復用面向對象軟件基礎》
1. 《大話設計模式》
- 前言
- 設計模式六大原則
- 1——創建型模式之簡單工廠模式
- 2——創建型模式之工廠方法模式
- 3——創建型模式之抽象工廠模式
- 4——創建型模式之單例模式
- 5——創建型模式之建造者模式
- 6——創建型模式之原型模式
- 7——結構型模式之適配器模式
- 8——結構型模式之橋接模式
- 9——結構型模式之組合模式
- 10——結構型模式之裝飾者模式
- 11——結構型模式之外觀模式
- 12——結構型模式之享元模式
- 13——結構型模式之代理模式
- 14——行為型模式之職責鏈模式
- 15——行為型模式之命令模式
- 16——行為型模式之解釋器模式
- 17——行為型模式之迭代器模式
- 18——行為型模式之中介者模式
- 19——行為型模式之備忘錄模式
- 20——行為型模式之觀察者模式
- 21——行為型模式之狀態模式
- 22——行為型模式之策略模式
- 23——行為型模式之模板方法模型
- 24——行為型模式之訪問者模式
- 設計模式總結