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 – 在jooq中访问sql-array项 2023-10-30
- java如何获得redis所有的key-value 2022-12-06
- Spring IOC容器Bean管理XML注入集合类型属性 2022-12-02
- Autowired的注入过程源码解析 2023-05-08
- spring boot整合Shiro实现单点登录的示例代码 2023-12-16
- 永中文档在线转换服务Swagger调用说明 2022-12-15
- Java二维数组与稀疏数组相互转换实现详解 2023-05-31
- spring boot使用拦截器修改请求URL域名 换 IP 访问的方法 2023-05-19
- SpringBoot整合Redis实现常用功能超详细过程 2023-04-18
- springboot(thymeleaf)中th:field和th:value的区别及说明 2023-06-10
