4 钩子方法的使用
- public
virtual void Display() { }
|
图4
- //DataViewer.cs
- using
System; -
- namespace
TemplateMethodSample -
{
-
abstract class DataViewer -
{ -
//抽象方法:获取数据 -
public abstract void GetData(); -
-
//具体方法:转换数据 -
public void ConvertData() -
{ -
Console.WriteLine("将数据转换为XML格式。"); -
} -
-
//抽象方法:显示数据 -
public abstract void DisplayData(); -
-
//钩子方法:判断是否为XML格式的数据 -
public virtual bool IsNotXMLData() -
{ -
return true; -
} -
-
//模板方法 -
public void Process() -
{ -
GetData(); -
//如果不是XML格式的数据则进行数据转换 -
if (IsNotXMLData()) -
{ -
ConvertData(); -
} -
DisplayData(); -
} -
} -
}
- //XMLDataViewer.cs
- using
System; -
- namespace
TemplateMethodSample -
{
-
class XMLDataViewer : DataViewer -
{ -
//实现父类方法:获取数据 -
public override void GetData() -
{ -
Console.WriteLine("从XML文件中获取数据。"); -
} -
-
//实现父类方法:显示数据,默认以柱状图方式显示,可结合桥接模式来改进 -
public override void DisplayData() -
{ -
Console.WriteLine("以柱状图显示数据。"); -
} -
-
//覆盖父类的钩子方法 -
public override bool IsNotXMLData() -
{ -
return false; -
} -
} -
}
- //Program.cs
- using
System; -
- namespace
TemplateMethodSample -
{
-
class Program -
{ -
static void Main( string[]args) -
{ -
DataViewer dv; -
dv = new XMLDataViewer(); -
dv.Process(); -
Console.Read(); -
} -
} -
}
从XML文件中获取数据。 以柱状图显示数据。 |
5 模板方法模式效果与适用场景
5.1 模式优点
5.2 模式缺点
5.3
模式适用场景