模板设计模式
设计模式概念
设计模式就是解决一些问题时的固定思路,也就是代码设计思路经验的总结。
模板设计模式概述
- 针对某些情况,在父类中指定一个模板,然后根据具体情况,在子类中灵活的具体实现该模板
public abstract class Person{
// 有方法体的方法: 通用模板
public void sleep(){
System.out.println("两眼一闭,就睡觉...");
}
// 没有方法体的方法(抽象方法): 填充模板(要子类重新实现的)
public abstract void eat();
}
- 抽象类体现的就是模板设计思想,模板是将通用的东西在抽象类中具体的实现,而模板中不能决定
的东西定义成抽象方法,让使用模板(继承抽象类的类)的类去重写抽象方法实现需求
模板模式的实现步骤
- 1.定义抽象父类作为模板
- 2.在父类中定义"模板方法"— 实现方法(通用模板)+抽象方法(填充模板)
- 3.子类继承父类,重写抽象方法(填充父类的模板)
- 4.测试类:
- 创建子类对象,通过子类调用父类的“实现的方法”+ “子类重写后的方法”
案例演示
假如我现在需要定义新司机和老司机类,新司机和老司机都有开车功能,开车的步骤都一样,只是驾驶
时的姿势有点不同, 新司机:开门,点火,双手紧握方向盘,刹车,熄火 , 老司机:开门,点火,右手握方向盘左手
抽烟,刹车,熄火 。那么这个时候我们就可以将固定流程写到父类中,不同的地方就定义成抽象方法,让
不同的子类去重写
分析:
- 司机类
- 开车方法: 确定实现–通用模板
- 开门
- 点火
- (姿势)
- 刹车
- 熄火
- 姿势方法: 不确定实现–填充模板
- 开车方法: 确定实现–通用模板
- 新司机类继承司机类,重写姿势方法
- 老司机类继承司机类,重写姿势方法
父类java代码:
// 父类
public abstract class Driver {
// 开车方法 通用模板
public void driveCar(){
System.out.println("开门");
System.out.println("点火");
// 姿势??
ziShi();
System.out.println("刹车");
System.out.println("熄火");
}
// 姿势方法 填充模板
public abstract void ziShi();
}
现在定义两个使用模板的司机:
public class NewDriver extends Driver {
@Override
public void ziShi() {
System.out.println("双手紧握方向盘");
}
}
public class OldDriver extends Driver {
@Override
public void ziShi() {
System.out.println("右手握方向盘左手抽烟");
}
}
编写测试类
public class Test {
public static void main(String[] args) {
// 创建新司机对象
NewDriver d1 = new NewDriver();
d1.driveCar();
// 创建老司机对象
OldDriver d2 = new OldDriver();
d2.driveCar();
}
}
运行效果:
可以看出,模板模式的优势是,模板已经定义了通用架构,使用者只需要关心自己需要实现的功能即可!非常的强大!
总结:
1.定义一个抽象类作为父类
2.在抽象类中,该模板可以确定的功能,就定义成一个有方法体的方法,作为通用模板
3.在抽象类中,该模板不可以确定的功能,就定义成一个抽象方法,作为填充模板
4.让需要使用该模板的类,去继承该抽象类,填充模板\使用模板