模板方法设计模式
在软件开发过程中存在这样的情况,某类的某个方法的实现需要几个固定的步骤。在这些固定的步骤中,对于该类的不同对象,有些步骤的实现是固定不变的,有些步骤的实现是大相径庭的,有些是可变可不变的,对于这种情况就适用于模板方法设计模式。
模板方法设计模式的定义为:定义一个操作中某个算法的框架,然后将一些步骤延迟到子类中。模板方法模式可以使子类在不改变一个算法结构的前提下,对某些步骤实现个性化定义。
模板方法程序构成
在模板方法设计模式中,存在一个父类,其中包含两类方法。
模板方法:
实现某个算法的方法步骤,这些步骤都是调用步骤方法完成的。
步骤方法:模板方法中的每个阶段方法,其有三种类型。
- 抽象方法:子类必须实现的方法,是完成模板方法的算法步骤中必须由子类完成的个性化定义。
- 最终方法:子类不能重写的方法,是完成模板方法的算法步骤,对于所有子类执行都一样的步骤。
- 钩子方法:父类给出默认实现,但子类也可以重写的方法。
程序举例
1.定义父类
public abstract class ShoppingService {
// 模板方法
public final void shopping() {
login(); // 登录网站
choose(); // 挑选商品
pay(); // 付款
}
// 子类不能重写
public final void login() {
System.out.println("login");
}
// 子类必须实现
public abstract void choose();
// 钩子方法:子类可以重写
public void pay() {
System.out.println("alipay");
}
}
2.定义两个子类
public class DressShoopingService extends ShoppingService{
@Override
public void choose() {
System.out.println("choose Goach");
}
@Override
public void pay() {
System.out.println("choose wechat");
}
}
public class ShoseShoopingService extends ShoppingService{
@Override
public void choose() {
System.out.println("choose Nike");
}
}
3.定义测试类
public class MyTest {
public static void main(String[] args) {
DressShoopingService dress = new DressShoopingService();
ShoseShoopingService shose = new ShoseShoopingService();
dress.shopping();
shose.shopping();
}
}