模板模式
Posted guomomo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板模式相关的知识,希望对你有一定的参考价值。
介绍
流程标准化,但具体的原料(功能)自己实现。
如:泡茶有以下四个步骤: 1、 烧开水; 2 、把茶放到水杯中; 3、倒入开水; 4、可以什么都不干。
泡咖啡也有以下四个步骤: 1、 烧开水; 2、 把咖啡放到水杯中; 3、倒入开水; 4、 加入糖和牛奶。
程序
public abstract class AbstractTemplate {
public final void template(){
this.boilWater();
this.putIntoCup();
this.addHotWater();
if (isCustomered()) {
// 加入调料
this.addCondiments();
}
}
private void boilWater() {
System.out.println("烧开水");
}
protected abstract void putIntoCup();
private void addHotWater() {
System.out.println("加水");
}
protected abstract void addCondiments();
// 钩子函数
protected boolean isCustomered() {
return true;
}
}
因为流程中某一个环节可以省略,我们可以增加钩子函数来确认是否需要定制
```java
public class Coffee extends AbstractTemplate{
protected void putIntoCup() {
System.out.println("把咖啡放水杯里");
}
protected void addCondiments() {
System.out.println("加糖加奶");
}
}
java
public class Tea extends AbstractTemplate{
protected void putIntoCup() {
System.out.println("把茶叶放水杯里");
}
protected void addCondiments() {
System.out.println("加点***");
}
protected boolean isCustomered() {
return false;
}
}
测试下:
java
// 咖啡制作
AbstractTemplate coffee = new Coffee();
coffee.template();
System.out.println("-------------------");
// 茶制作
AbstractTemplate tea = new Tea();
tea.template();
```
结果:
以上是关于模板模式的主要内容,如果未能解决你的问题,请参考以下文章