面试和看源码。
谈到设计模式:
1、解决了什么问题?
2、怎么写?
模板方法设计模式解决了什么问题?
解决方法中存在重复代码的问题。
写法:
1)定义一个抽象类:
2)在里面定义两个方法:
1> 一个是模板方法,把相同的代码放进去;
2> 一个是抽象方法,具体实现交给子类完成;
People类:
package cn.ensource.d6_abstact_template;
public abstract class People {
// 设计模板方法设计模式
// 1. 定义一个模板方法出来
public void write() {
System.out.println("====我的爸爸====");
System.out.println("我的爸爸好牛啊~");
// System.out.println("我的爸爸特别牛,开车都不开红绿灯!");
// 模板方法其实也不清楚正文部分到底应该是怎么写?但是它知道子类必须写的。
System.out.println(writeMain());
System.out.println("有这样的爸爸太好了!");
}
// 3. 设计一个抽象方法,具体的实现交给子类来完成
public abstract String writeMain();
}
Teacher类:
package cn.ensource.d6_abstact_template;
public class Teacher extends People {
@Override
public String writeMain() {
return "我的爸爸特别牛,让我站在这里别走,他去买个橘子!";
}
}
Student类:
package cn.ensource.d6_abstact_template;
public class Teacher extends People {
@Override
public String writeMain() {
return "我的爸爸特别牛,让我站在这里别走,他去买个橘子!";
}
}
测试类:
package cn.ensource.d6_abstact_template;
public class Test {
public static void main(String[] args) {
// 目标:搞清楚抽象类的应用场景,设计模板方法模式
// 场景:学生和老师都要写一篇作文:我的爸爸
// 第一段是一样的
// 正文部分自由发挥
// 最后一段也是一样的
Teacher t = new Teacher();
t.write();
Student s = new Student();
s.write();
}
}
多学一招:
建议使用final关键字修饰模板方法,为什么?
模板方法,禁止子类再去方法重写,防止失效。
模板方法设计模式解决了什么问题?
解决了方法中存在重复代码的问题。
模板方法设计模式应该怎么写?
定义一个抽象类;
在里面定义2个方法,一个是模板方法,放相同的代码,一个是抽象方法:具体实现交给子类完成。
模板方法建议使用什么关键字修饰?为什么?
final,不再让子类方法重写@override。