模板模式

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

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

 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 }

 

posted @ 2018-01-04 11:50  清风拂来  阅读(138)  评论(0编辑  收藏  举报