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

时间: 2024-10-12 17:26:53

【2016-10-13】【坚持学习】【Day4】【模板方法模式】的相关文章

《Head First 设计模式》学习笔记——模板方法模式

模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模板方法模式的用意. 设计模式 模板方法模式:在一个方法中定义一个算法的框架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结果的情况下,重新定义算法中的某些步骤. 模板就是一个方法,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现.这样可以确

设计模式学习之模板方法模式(TemplateMethod,行为型模式)(9)

一.什么是模板方法模式 Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为. 二.模板方法模式的应用场景 Template Method模式一般应用在具有以下条件的应用中: - 具有统一的操作步骤或操作过程 - 具有不同的操作细节 - 存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同 private static void Main(string[] arg

设计模式13:Template Method 模板方法模式(行为型模式)

Template Method 模板方法模式(行为型模式) 变与不变 变化——是软件永恒的主题,如何管理变化带来的复杂性?设计模式的艺术性和复杂度就在于如何分析,并发现体系中的变化点和稳定点,并使用特定的设计方法来应对这种变化. 动机(Motivation) 在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固定的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现. 如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期

2016.10.24 继续学习

今天继续学习,进入面向对象的学习. 1.输出换行可以这样输出 System.out.println(); 2.数组学得有点蒙.... public class PracMultiArray { public static void main(String[] args) { int[][] a1 = {{1, 2, 4}, {3, 1, 2}, {14, 5, 3}}; System.out.println(a1[1][2]); for(int i=0;i<a1.length;i++){ for

2016.10.30 济南学习 Day2 下午 T1

他 [问题描述] 一张长度为??的纸带,我们可以从左至右编号为0 ? ??(纸带最左端标号为 0).现在有??次操作,每次将纸带沿着某个位置进行折叠,问所有操作之后纸带 的长度是多少. [输入格式] 第一行两个数字??, ??如题意所述. 接下来一行??个整数代表每次折叠的位置. [输出格式] 一行一个整数代表答案. [样例输入] 5 2 3 5 [样例输出] 2 [样例解释] 树上有只鸟. [数据规模与约定] 对于60%的数据,??, ?? ≤ 3000. 对于100%的数据,?? ≤ 101

2016.10.26 继续学习

今天继续学习面向对象部分 1.static的使用 静态方法不能访问非静态变量 非静态方法可以访问静态变量 a.静态变量 public class PracStaticParam { int id = 0; static int num = 0; PracStaticParam(int x) { this.id = x; num++; } public static void main(String[] args) { PracStaticParam s1 = new PracStaticPara

2016.10.13 工作遇到的一些mongo问题

一.tokumx 2.4 用户管理操作 db.isMaster() use admin db.addUser("root","rootpwd")默认为管理员用户 db.auth("root","rootpwd")   验证用户 db.system.users.find()    查看用户 db.system.users.update({"user":"zayhuroot"},{"

2016.9.13 会话学习

---恢复内容开始--- 会话 打开浏览器访问网站,直至关闭网站为止,所流程被称为会话 cookie 属于客户端技术,把响应的客户端的资源进行存储 只能存字符串 cookie是放在响应头里发送给浏览器 浏览器支持每个服务端20个cookie,共300个 每个cookie 4k大小 实现记录客户端访问的最后时间 1得到客户端所有的cookie reponse.setContetType("text/html;charset=utf-8"); PrintWriter pw= reponse

2016/01/13开始学习git:管理修改、撤销修改

一.管理修改 第一次修改readme.txt       : 增加一行Git tracks changes. 添加readme.txt                :       git add readme.txt 第二次修改readme.txt        : 修改Git tracks changes.为Git tracks changes of files. 提交readme.txt                :     git commit -m "git tracks chan

2016/01/13开始学习git:删除文件

1.在E:\learngit\文件夹(工作区)下删除file1.txt文件 rm file1.txt git status 查看库状态会有提示: deleted:    file1.txt 2.如果想要删除库里边的file1.txt $ git rm file1.txtrm 'file1.txt' $ git commit -m "remove file1.txt"[master f9bc4cf] remove file1.txt 1 file changed, 0 insertion