模板模式
模板方法模式:
定义:一个模板方法用一些抽象的操作定义一个算法,而子类将重定义这些操作
以提供具体行为
意图:定义了一个在操作中的一个算法框架,把一些步骤推迟到子类去实现,模板方法
模式让子类不不要改变算法结构而重新定义特定的算法步骤
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 }