简介
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。通俗的说的就是有很多相同的步骤的,在某一些地方可能有一些差别适合于这种模式。
模板方法的结构图也比较简单:
角色
模板模式中只有两个角色
抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。
简单实现
举例:为了使用新的软件,我们需要下载,安装,配置和运行。使用模板方法来实现。
1.创建抽象类(AbstractClass),定义抽象方法。
public abstract class Software {
abstract void download();
abstract void install();
abstract void config();
abstract void run();
public final void useSoftware(){
download();
install();
config();
run();
}
}
2.创建具体类(ConcreteClass)
public class SystemSoftware extends Software {
@Override
void download() {
System.out.println("download system software ...");
}
@Override
void install() {
System.out.println("install system software ...");
}
@Override
void config() {
System.out.println("config system software ...");
}
@Override
void run() {
System.out.println("run system software ...");
}
}
public class UserSoftware extends Software{
@Override
void download() {
System.out.println("download user software ...");
}
@Override
void install() {
System.out.println("install user software ...");
}
@Override
void config() {
System.out.println("config user software ...");
}
@Override
void run() {
System.out.println("run user software ...");
}
}
3.创建Client(Main验证)
public class TemplateMain {
public static void main(String[] args) {
Software software1 = new SystemSoftware();
Software software2 = new UserSoftware();
software1.useSoftware();
software2.useSoftware();
}
}