Markdown语法:
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模板方法模式定义算法框架


基础教程推荐
猜你喜欢
- Java实现大文件的分割与合并的方法详解 2023-04-06
- Javascript 面向对象特性 2024-03-06
- Java解析xml文件和json转换的方法(DOM4j解析) 2024-03-05
- Java结构性设计模式中的装饰器模式介绍使用 2023-05-25
- Spring @Transactional事务失效的原因分析 2023-05-19
- SpringBoot如何配置获取request中body的json格式参数 2023-02-10
- Java架构设计之六步拆解 DDD 2022-10-24
- SpringBoot+Redis+Lua分布式限流的实现 2023-04-07
- 向/从SQL数据库(如H2)插入和获取java.time.LocalDate对象 2023-11-08
- 关于maven的用法和几个常用的命令 2023-06-30