Markdown语法:
Java模板方法模式定义算法框架
定义
在一个抽象类中定义好算法执行的骨架,而将具体的算法实现留给子类去实现。这种模式可以很好地定义算法的框架,并且让子类对具体算法的实现进行插件式的扩展。
实现
我们以制作咖啡和茶为例子来说明模板方法的实现:
首先定义一个抽象类
public abstract class Beverage {
// 用于加入调料
final public void prepareBeverage() {
boilWater();
brew();
pourInCup();
addCondiments();
}
// 把水煮沸
public void boilWater() {
System.out.println("Boiling water");
}
// 把饮料倒入杯子
public void pourInCup() {
System.out.println("Pouring into cup");
}
// 泡饮料
abstract void brew();
// 加调料
abstract void addCondiments();
}
这是一个抽象类,其中有许多的钩子方法。其中brew()和addCondiments()是抽象方法,需要由子类去实现。这两个方法实现的是真正的制作咖啡或茶的方法。
以下是制作咖啡的具体实现:
public class Coffee extends Beverage {
void brew() {
System.out.println("Dripping Coffee through filter");
}
void addCondiments() {
System.out.println("Adding Sugar and Milk");
}
}
接下来是制作茶的具体实现:
public class Tea extends Beverage {
void brew() {
System.out.println("Steeping the tea");
}
void addCondiments() {
System.out.println("Adding Lemon");
}
}
示例说明
- 咖啡
以下代码使用了咖啡对象进行调用:
public class TestDrive {
public static void main(String[] args) {
Coffee coffee = new Coffee();
coffee.prepareBeverage();
}
}
运行结果:
Boiling water
Dripping Coffee through filter
Pouring into cup
Adding Sugar and Milk
可以看到最终打印输出的结果为调用了父类的模板方法prepareBeverage()来输出制作一杯咖啡的所有步骤。
- 茶
以下代码使用了茶对象进行调用:
public class TestDrive {
public static void main(String[] args) {
Tea tea = new Tea();
tea.prepareBeverage();
}
}
运行结果:
Boiling water
Steeping the tea
Pouring into cup
Adding Lemon
同样,这里通过调用父类的模板方法prepareBeverage()方法来得到制作一杯茶的所有步骤。
通过这两个示例的说明,可以看到,模板方法可以很好地实现算法的框架。同时,这种模式也可以让子类非常方便地扩展算法的实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java模板方法模式定义算法框架 - Python技术站