案例:
- 现在有两类学生,一类是中学生,一类是小学生,它们都要写《我的爸爸》这篇作文。
- 要求每种类型的学生,标题第一段和最后一段,内容必须一样。正文部分自由发挥。
- 请选择最优的面向对象方案进行设计。
1.创建一个父类Student,用于生成模板方法模式。
public abstract class Student {
/**
* 正式生成模板方法模式
*/
//final的目的是为了让模板方法模式不被重写,模板方法模式是被子类直接调用的,一旦重写就失效了,加上final会让代码更专业和安全
public final void write(){
System.out.println("\t\t《我的爸爸》");
//标题第一段
System.out.println("您的爸爸是什么样子的,请您来说说:");
//正文部分:每个子类都要写的,且每个子类写的情况也不一样,因此模板方法把正文部分定义成抽象方法再交给具体的子类完成
System.out.println(writeMain());
//结尾
System.out.println("我的爸爸特别好。");
}
public abstract String writeMain();
}
2.分别创建小学生类StudentChild和中学生类StudentMiddle,然后直接套用父类中的模板方法模式使用。
//小学生
public class StudentChild extends Student {
@Override
public String writeMain() {
return "小学生:我的爸爸是超级演英雄。";
}
}
//中学生
public class StudentMiddle extends Student{
@Override
public String writeMain() {
return "中学生:我的爸爸无所不能。";
}
}
3.调用小学生和中学生类。
public class Demo {
public static void main(String[] args) {
//目标:理解模板方法模式的思想和使用步骤
StudentMiddle s = new StudentMiddle();
s.write();
StudentChild s2 = new StudentChild();
s2.write();
}
}