【設計模式基礎】行為模式 - 6 - 模板方法(Template Method)
1. 模式意圖
定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中去。 Template Method使得子類可以不改變一個演算法的結構即可以重定義該演算法的某些特定步驟。
模板方法模式實際上是所有模式中最常用的幾個模式之一。
模板方法中的方法可以分為兩大類:模板方法(Template Method) 和 基本方法(Primitive Method):
模板方法
{
... ...
基本方法;
基本方法;
... ...
}
模板方法:
一個模板方法是定義在抽象類中的,把基本操作方法組合在一起形成一個總演算法或一個總行為的方法。這個模板方法一般會在抽象類中定義,並由子類不加以修改地完全繼承下來。
基本方法:
基本方法又可以分為三種:抽象方法(Abstract Method),具體方法(Concrete Method),鉤子方法(Hook Method):
- 抽象方法:一個抽象方法由抽象類宣告,由具體子類實現。
- 具體方法:一個具體方法又抽象類宣告並實現,而子類並不實現或置換。
- 鉤子方法:一個鉤子方法由抽象類宣告並實現,而子類會加以擴充套件。通常抽象類給出的實現是一個空實現,作為方法的預設實現,鉤子方法通常以do開頭。
2. 模式定義
抽象模板(Abstract Class):定義了一個或多個抽象操作(Primitive Method),以便讓子類實現;這些抽象操作叫做基本操作,它們是一個頂級邏輯的組成步驟。定義並實現了一個模板方法,這個模板方法一般是一個具體方法,它給出一個頂級邏輯的骨架,而邏輯的組成步驟在相應的抽象操作中,推遲到子類實現。頂級邏輯也有可能呼叫一些具體方法。
具體模板(Concrete Class):實現父類所定義的一個或多個抽象方法,它們是一個頂級邏輯的組成步驟。
每一個抽象模板角色都可以有任意多個具體模板角色與之對應,而每一個具體模板角色都可以給出這些抽象方法的不同實現,從而使得頂級邏輯的實現各不相同。
3. 模式實現
3.1 C#實現模板方法
// Template Method pattern -- Structural example
using System;
// "AbstractClass"
abstract class AbstractClass
{
// Methods
abstract public void PrimitiveOperation1();
abstract public void PrimitiveOperation2();
// The Template method
public void TemplateMethod()
{
Console.WriteLine("In AbstractClass.TemplateMethod()");
PrimitiveOperation1();
PrimitiveOperation2();
}
}
// "ConcreteClass"
class ConcreteClass : AbstractClass
{
// Methods
public override void PrimitiveOperation1()
{
Console.WriteLine("Called ConcreteClass.PrimitiveOperation1()");
}
public override void PrimitiveOperation2()
{
Console.WriteLine("Called ConcreteClass.PrimitiveOperation2()");
}
}
/// <summary>
/// Client test
/// </summary>
public class Client
{
public static void Main( string[] args )
{
// Create instance and call template method
ConcreteClass c = new ConcreteClass();
c.TemplateMethod();
}
}
4. 模式應用
相關文章
- C#設計模式-模板方法模式(Template Method)C#設計模式
- 人人都會設計模式—模版方法模式–Template-Method設計模式
- Head First 設計模式 —— 09. 模版方法 (Template Method) 模式設計模式
- 模板方法模式(Template)模式
- 使用C# (.NET Core) 實現模板方法模式 (Template Method Pattern)C#模式
- 設計模式-模板方法模式設計模式
- 行為型設計模式---模板方法觀察者模式責任鏈模式設計模式
- 設計模式--工廠方法模式(Factory Method Pattern)設計模式
- python設計模式-模板方法模式Python設計模式
- js設計模式--模板方法模式JS設計模式
- 設計模式之模板方法模式設計模式
- Java設計模式-模板方法模式Java設計模式
- 設計模式之【模板方法模式】設計模式
- 談一談我對‘模板方法’設計模式的理解(Template)設計模式
- 模板方法設計模式設計模式
- 《Head First 設計模式》:模板方法模式設計模式
- PHP設計模式之模板方法模式PHP設計模式
- 簡說設計模式——模板方法模式設計模式
- 極簡設計模式-模板方法模式設計模式
- 設計模式實戰-模板方法模式設計模式
- 23種設計模式(四)- 模板方法設計模式設計模式
- 設計模式之模板方法設計模式
- C#設計模式(14)——模板方法模式C#設計模式
- javascript設計模式 之 8 模板方法模式JavaScript設計模式
- Java描述設計模式(19):模板方法模式Java設計模式
- Java設計模式之(十三)——模板方法模式Java設計模式
- 設計模式-模板模式設計模式
- 設計模式——模板模式設計模式
- 【ES6基礎】模板字串(Template String)字串
- Java設計模式之模板方法模式和建造者模式Java設計模式
- 折騰Java設計模式之模板方法模式Java設計模式
- 設計模式 | 模板方法模式及典型應用設計模式
- Rust語言之GoF設計模式: 模板方法模式RustGo設計模式
- 原始碼中的設計模式--模板方法模式原始碼設計模式
- JAVA設計模式之模板方法Java設計模式
- 詳解模板方法設計模式設計模式
- Java設計模式——模板設計模式Java設計模式
- Go 實現常用設計模式(七)模板方法模式Go設計模式
- 原始碼中的設計模式--模板方法模式(鉤子方法)原始碼設計模式