设计模式学习之模板方法模式(TemplateMethod,行为型模式)(9)
2014-07-10 15:07
429 查看
一、什么是模板方法模式
Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。
二、模板方法模式的应用场景
Template Method模式一般应用在具有以下条件的应用中:
- 具有统一的操作步骤或操作过程
- 具有不同的操作细节
- 存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同
private static void Main(string[] args) { MakeCar bus = new MakeBus(); bus.Make(); MakeCar jeep = new MakeJeep(); jeep.Make(); Console.ReadLine(); } public abstract class MakeCar { /// <summary> /// 组装车头 /// </summary> public abstract void MakeHead(); /// <summary> /// 组装车身 /// </summary> public abstract void MakeBody(); /// <summary> /// 组装车尾 /// </summary> public abstract void MakeFoot(); /// <summary> /// 模板方法 /// </summary> public void Make() { MakeHead(); MakeBody(); MakeFoot(); } } public class MakeBus : MakeCar { public override void MakeHead() { Console.WriteLine("组装bus车头"); } public override void MakeBody() { Console.WriteLine("组装bus车身"); } public override void MakeFoot() { Console.WriteLine("组装bus车尾"); } } public class MakeJeep : MakeCar { public override void MakeHead() { Console.WriteLine("组装jeep车头"); } public override void MakeBody() { Console.WriteLine("组装jeep车身"); } public override void MakeFoot() { Console.WriteLine("组装jeep车尾"); } }
.NET 中的Template Method模式
.NET Framework中Template Method模式的使用可以说是无处不在,比如说我们需要自定义一个文本控件,会让它继承于RichTextBox,并重写其中部分事件,如下例所示:
public class MyRichTextBox : RichTextBox { private static bool m_bPaint = true; private string m_strLine = ""; private int m_nContentLength = 0; private int m_nLineLength = 0; private int m_nLineStart = 0; private int m_nLineEnd = 0; private string m_strKeywords = ""; private int m_nCurSelection = 0; protected override void OnSelectionChanged(EventArgs e) { m_nContentLength = this.TextLength; int nCurrentSelectionStart = SelectionStart; int nCurrentSelectionLength = SelectionLength; m_bPaint = false; m_nLineStart = nCurrentSelectionStart; while ((m_nLineStart > 0) && (Text[m_nLineStart - 1] != ',')&& (Text[m_nLineStart - 1] != '{')&& (Text[m_nLineStart - 1] != '(')) m_nLineStart--; m_nLineEnd = nCurrentSelectionStart; while ((m_nLineEnd < Text.Length) && (Text[m_nLineEnd] != ',')&& (Text[m_nLineEnd] != '}')&& (Text[m_nLineEnd] != ')')&& (Text[m_nLineEnd] != '{')) m_nLineEnd++; m_nLineLength = m_nLineEnd - m_nLineStart; m_strLine = Text.Substring(m_nLineStart, m_nLineLength); this.SelectionStart = m_nLineStart; this.SelectionLength = m_nLineLength; m_bPaint = true; } protected override void OnTextChanged(EventArgs e) { // 重写OnTextChanged } }
其中OnSelectionChanged()和OnTextChanged()便是Template Method模式中的基本方法之一,也就是子步骤方法,它们的调用已经在RichTextBox中实现了。
参考:http://terrylee.cnblogs.com/archive/2006/07/04/DesignPattern_TemplateMethod.html
相关文章推荐
- 设计模式学习日志(14)-TemplateMethod模板方法(行为型模式)
- “设计模式”学习之九:策略、模板方法与访问者(行为型)
- "围观"设计模式(18)--行为型之模板方法模式(TemplateMethod Pattern)
- 面向对象设计模式之TemplateMethod模板方法(行为型)
- 设计模式学习总结11 - 行为型6 - TemplateMethod模版方法模式
- 设计模式深入学习--Template Method模板方法模式(行为型模式)
- 设计模式学习笔记-模板方法
- 设计模式学习笔记(二十四)——Template Method模板方法
- 设计模式之模板方法模式(TemplateMethod)
- 设计模式学习----模板方法模式
- 设计模式学习-每日一记(16.模板方法模式)
- 设计模式学习笔记(十六)——Template Method模板方法模式
- HeadFirst 设计模式学习笔记8--模板方法模式
- 设计模式学习-Template Method(模板方法)
- 设计模式之七、模板方法模式TemplateMethod
- java 设计模式 学习笔记(9) 模板方法模式
- 设计模式笔记 13. TemplateMethod 模板方法模式(行为型模式)
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- 设计模式笔记(14)---模板方法模式(行为型)
- TemplateMethod模板方法(行为型模式)