模板模式
关于模板模式
模板模式的定义:定义一个算法框架,将算法的一些步骤延迟到子类中,使子类可以不改变该算法的结构下重新定义某些特定步骤。他是一种类行为型模式。
优点:
- 封装不变部分,拓展可变部分
- 提取公共代码,便于维护
- 行为由父类控制,子类实现
缺点:每个不同的实现都需要一个子类来实现,导致类的个数增加,系统庞大。
核心:父类为抽象类,其中有方法定义了操作的执行步骤,子类实现父类的抽象方法。
注意事项:为防止恶意操作,模板模式方法都需加上final关键词
模板模式的类图
下面给出一个模板模式的实例应用
关于咖啡和茶的冲泡方法,都需要进行四个步骤
- 将水烧开
- 将材料(茶或者咖啡)放入杯中
- 将开水倒入杯中
- 将泡好的茶(或者咖啡)端给客人
根据模板模式的类图给出上述实例类图
其中给出了抽象类operator,operator类中有方法boilWater() 烧水,addCondiment() 加料,pourWater() 倒水,takeToGuest() 送饮料,以及规定方法step()规定执行顺序。根据实例描述,其中方法addCondiment()和takeToGuest()是抽象方法需要在子类tea和caffeine中实现。
下面给出实现的代码
Operator类
public abstract class Operator {
public void boilWater() {
System.out.print("将水烧开");
}
public abstract void addCondiment();
public void pourWater() {
System.out.print("将水倒入杯中");
}
public abstract void takeToGuest();
public void step()
{
boilWater();
addCondiment();
pourWater();
takeToGuest();
}
}
Tea类
public class Tea extends Operator {
public void addCondiment()
{
System.out.println("将茶叶加入杯中");
}
@Override
public void takeToGuest() {
System.out.println("将泡好的茶端给客人");
}
}
Caffeine类
public class Caffeine extends Operator {
public void addCondiment()
{
System.out.println("将咖啡粉倒入杯中");
}
@Override
public void takeToGuest() {
System.out.println("将泡好的咖啡端给客人");
}
}
test类
public class test {
public static void main(String[] args) {
System.out.println("=======================");
Tea tea=new Tea();
Caffeine caffeine=new Caffeine();
System.out.println("泡茶的基本步骤:");
tea.step();
System.out.println("=======================");
System.out.println("泡咖啡的基本步骤:");
caffeine.step();
}
}
测试一下,给出测试结果