简单介绍:
模板模式(Template Pattern),一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。
缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。
注意事项:为防止恶意操作,一般模板方法都加上 final 关键词(优雅永不过时!)
场景:小学生和中学生都要写一篇文章,文章开头和结尾都是固定的,所以可以用到模板方法模式。但是文章主体是不一样的,所以把文章主体抽象成抽象方法,供小学生和中学生重写该方法。
- 父类: Student
- 子类:PrimaryStudent MiddleStudent
- 测试类:Test
package com.itheima.d9_abstract_template;
/**
* 父类Student。
* 提供模板写方法(分为文章开头结尾(固定的),文章主体(变化的))
*/
public abstract class Student {
//定义模板方法
public final void write(){
//文章开头
System.out.println("文章开头!");
//文章主体,调用抽象方法writeMain()
System.out.println(writeMain());
//文章结尾
System.out.println("文章结尾!");
}
/*
//文章主体,由于是变化的,将其定义成抽象方法,返回值为String类型,供两个子类重写。
*/
public abstract String writeMain();
}
package com.itheima.d9_abstract_template;
/**
* 小学生类
*/
public class PrimaryStudent extends Student{
@java.lang.Override
public String writeMain() {
return "俺是小学生,来写文章主体。";
}
}
package com.itheima.d9_abstract_template;
/**
* 中学生类
*/
public class MiddleStudent extends Student{
@java.lang.Override
public String writeMain() {
return "俺是中学生,来写文章主体。";
}
}
package com.itheima.d9_abstract_template;
/**
* 测试类
*/
public class Test {
public static void main(String[] args) {
//实例化对象
MiddleStudent m =new MiddleStudent();
PrimaryStudent p = new PrimaryStudent();
//调用对象的方法
m.write();
p.write();
}
}