【2016-10-13】【坚持学习】【Day4】【模板方法模式】

今天学习模板方法模式

例子代码;

模板抽象类,定义了一套流程,有一些方法已经实现,有一些抽象方法需要继承它的子类实现

    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();

作者:zscmj
出处:http://www.cnblogs.com/zscmj/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/zscmj/p/5958109.html