您的位置:首页 > 其它

设计模式学习之模板方法模式(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: