今天学习模板方法模式
例子代码;
模板抽象类,定义了一套流程,有一些方法已经实现,有一些抽象方法需要继承它的子类实现
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(); } }
具体实现模板类:重写抽象方法,实现具体逻辑,重写钩子方法,设置钩子方法新值
class XMLDataViewer : DataViewer { //实现父类方法:获取数据 public override void GetData() { Console.WriteLine("从XML文件中获取数据。"); } //实现父类方法:显示数据 public override void DisplayData() { Console.WriteLine("以柱状图显示数据。"); } //覆盖父类的钩子方法 public override bool IsNotXMLData() { return false; } }
主程序:
DataViewer dv; dv = new XMLDataViewer(); dv.Process();
时间: 2024-10-12 17:26:53