如果一个抽象父类提供多个子类的通用方法,并把一个或多个方法留给其子类去实现,这就是Template Method Pattern。这是一个很常用、很简单的设计模式,整个过程就是一个抽象类的实现。抽象类作为多个子类的通用模版,子类在抽象类的基础上进行扩展和改造,但总体上回大致保留抽象类的行为方法。
在抽象父类Hero中定义了四个方法,其中move(),attact(),performSkills()是抽象方法,需要子类实现,模版方法start()在父类中实现,两个子类ShadowHunter和TerrorBlade分别继承Hero父类,并重写了其抽象方法。
package TemplateMethod;
public abstract class Hero {
public abstract void move();
public abstract void attact();
public abstract void performSkills();
public final void start()
{
move();
attact();
performSkills();
}
}
package TemplateMethod;
public class ShadowHunter extends Hero{
private String s;
public ShadowHunter(String s)
{
this.s = s;
}
public void move()
{
System.out.println(s + " move!");
}
public void attact()
{
System.out.println(s + " attact!");
}
public void performSkills()
{
System.out.println(s + " performskills!");
}
}
package TemplateMethod;
public class TerrorBlade extends Hero{
private String s;
public TerrorBlade(String s)
{
this.s = s;
}
public void move()
{
System.out.println(s + " move!");
}
public void attact()
{
System.out.println(s + " attact!");
}
public void performSkills()
{
System.out.println(s + " performskills!");
}
}
package TemplateMethod;
public class Main {
public static void main(String[] args)
{
Hero h1 = new ShadowHunter("ShadowHunter");
Hero h2 = new TerrorBlade("TerrorBlade");
h1.start();
h2.start();
}
}
输出结果为 :ShadowHunter move!
ShadowHunter attact!
ShadowHunter performskills!
TerrorBlade move!
TerrorBlade attact!
TerrorBlade performskills!