模板方法模式
GOF对于模板方法模式的定义是:“定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。”
TempleateMethod使得子类可以不改变的一个算法的结构即可重新定义该算法的某些特定步骤。
上代码,以手机为例。
package TemplateMethod;
public abstract class MobilePhone {
protected abstract String Users();
public void PowerOn()
{
System.out.println(Users() + "的手机开机了。");
}
public void PowerOff()
{
System.out.println(Users() + "的手机关机了。");
}
public void DialUp()
{
System.out.println(Users() + "的手机正在拨打电话。");
}
public void About()
{
System.out.println("我是" + Users() + "的手机。");
}
}
package TemplateMethod;
public class MobilePhoneA extends MobilePhone{
@Override
protected String Users() {
// TODO Auto-generated method stub
return "程序员";
}
}
package TemplateMethod;
public class MobilePhoneB extends MobilePhone{
@Override
protected String Users() {
// TODO Auto-generated method stub
return "程序媛";
}
}
package TemplateMethod;
public class client {
private static void test(MobilePhone phone)
{
System.out.println("测试手机");
phone.PowerOn();
phone.DialUp();
phone.About();
phone.PowerOff();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
test(new MobilePhoneA());
test(new MobilePhoneB());
}
}
运行结果:
模板方式很好地实现了代码的复用平台。
一般在如下情况使用模板方式:
- 一次性地实现一个算法不变的部分,而将可变的行为留给子类实现。
- 当子类中有公共的行为可以提取到公共的父类中去,并且子类有自己的个性化要求时。
- 一般子类要扩展的地方是固定的。