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

 

posted @ 2016-10-13 22:35  zscmj  阅读(123)  评论(0编辑  收藏  举报