• 模板模式


    模板方法模式:
    定义:一个模板方法用一些抽象的操作定义一个算法,而子类将重定义这些操作
    以提供具体行为

    意图:定义了一个在操作中的一个算法框架,把一些步骤推迟到子类去实现,模板方法
    模式让子类不不要改变算法结构而重新定义特定的算法步骤

     1 package templatedemo;
     2 
     3 public class TemplateDemo {
     4 
     5     /**
     6      * 模板方法模式 示例
     7      * 
     8      * @param args
     9      */
    10     public static void main(String[] args) {
    11         Teacher t1 = new DBTeacher();
    12         System.out.println("--------数据库老师上课-------");
    13         t1.work();// 父类引用变量指向子类对象,调用prepared 方法和end方法时,直接调用的是父类的
    14         // 而调用teaching方法时,调用的是具体子类对象的重写了父类的teaching方法
    15         Teacher t2 = new CTeacher();
    16         System.out.println("--------C语言老师上课--------");
    17         t2.work();
    18     }
    19 }
    20 
    21 abstract class Teacher {
    22     // 老师工作的方法,是一个流程,分若干步骤,即一个模板方法,这个模板的先后顺序已经固定,不能改变
    23     // 比如,授课前准备和授课结束这两个方法都是一样的,可以在父类中直接定义好,子类继承后直接使用,
    24     // 但是teaching这个方法每个老师是不同的,这时就应该延迟到让Teacher的子类去实现
    25     // 也就是通用的,放在父类中定义好,不通用的,让子类去定义
    26     public void prepared() {
    27         System.out.println("准备好白板笔");
    28         System.out.println("打开投影仪");
    29     }
    30 
    31     public void end() {
    32         System.out.println("关闭投影仪");
    33         System.out.println("锁教室门");
    34     }
    35 
    36     public abstract void teaching();
    37 
    38     // 一个方法只需要做方法的声明,这个方法就需要被定义为抽象方法,这个类要定义为抽象类
    39     // 模板方法,分3个步骤
    40     public void work() {
    41         // 1 授课前准备
    42         prepared();// 调用本类的方法
    43         // 2 进行授课
    44         teaching();
    45         // 授课结束
    46         end();
    47     }
    48 }
    49 
    50 class DBTeacher extends Teacher {
    51     // 重写父类的抽象方法
    52     public void teaching() {
    53         System.out.println("打开Oracle");
    54         System.out.println("书写pl-sql指令");
    55         System.out.println("优化pl-sql指令");
    56     }
    57 }
    58 
    59 class CTeacher extends Teacher {
    60 
    61     @Override
    62     // 重写父类的抽象方法
    63     public void teaching() {
    64         System.out.println("打开VM");
    65         System.out.println("书写C指令");
    66         System.out.println("调试C程序");
    67     }
    68 }
  • 相关阅读:
    [No000088]并行循环vs普通循环
    [No000087]Linq排序,SortedList排序,二分法排序性能比较
    [No000086]C#foreach集合被改变,报错处理方案
    [No000085]C#反射Demo,通过类名(String)创建类实例,通过方法名(String)调用方法
    [No000084]C# 使用Log4Net(1)-快速建立一个demo
    [No000082]Convert和Parse的区别/Convert.ToInt32()与int.Parse()的区别
    [No000081]SVN学习笔记1-服务端搭建
    [No00007F]2016-面经[下] 英文简历写作技巧
    [No00007E]2016-面经[中]
    [No00007D]2016-面经[上]
  • 原文地址:https://www.cnblogs.com/enjoyjava/p/8192318.html
Copyright © 2020-2023  润新知