Java设计模式之模板模式(Template模式)介绍
什么是模板模式
模板模式是一种行为设计模式,它允许你定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板模式使得子类可以不改变算法的结构即可重新定义该算法的某些特定步骤。
在模板模式的实现中,一般由一个抽象类定义了算法的基本结构,具体的实现则由具体的子类来负责实现,其中抽象类中可能会有一些钩子方法,钩子方法通常有默认的实现,但子类可以自定义钩子方法。
模板模式的作用
模板模式提供了一个易于扩展的方案,可以使得算法的可定制性更强。
模板模式中,定义了通用的算法骨架,具体的实现归具体的子类来完成,因此这个算法骨架可以被许多具体的子类所复用,从而避免了代码的重复。
案例说明
下面以制作鱼香肉丝为例子,介绍模板模式在实际应用中的作用。
示例1:制作鱼香肉丝
在制作鱼香肉丝这个菜品时,我们要经过以下几个基本步骤:
- 切肉丝和青椒丝
- 煸炒肉丝和青椒丝
- 加入葱姜蒜、豆瓣酱等调料翻炒
- 加入水和调味料烧开
- 加入淀粉水让汤汁变稠
- 装盘上菜
下面是一份模板实现:
public abstract class FishFragrantPorkTemplate {
// 制作鱼香肉丝的模板方法
public final void make() {
cut();
fry();
saute();
boil();
addStarch();
serve();
}
// 切肉丝和青椒丝
public abstract void cut();
// 煸炒肉丝和青椒丝
public abstract void fry();
// 加入葱姜蒜、豆瓣酱等调料翻炒
public abstract void saute();
// 加入水和调味料烧开
public abstract void boil();
// 加入淀粉水让汤汁变稠
public void addStarch() {
System.out.println("加入淀粉水让汤汁变稠");
}
// 装盘上菜
public void serve() {
System.out.println("装盘上菜");
}
}
// 具体的鱼香肉丝制作类
public class ConcreteFishFragrantPork extends FishFragrantPorkTemplate {
@Override
public void cut() {
System.out.println("切肉丝和青椒丝");
}
@Override
public void fry() {
System.out.println("煸炒肉丝和青椒丝");
}
@Override
public void saute() {
System.out.println("加入葱姜蒜、豆瓣酱等调料翻炒");
}
@Override
public void boil() {
System.out.println("加入水和调味料烧开");
}
}
示例2:制作绿豆糕
制作绿豆糕时也有一些共性的步骤,例如制作豆浆、加入糯米粉等。因此可以使用模板模式来实现其制作流程:
public abstract class GreenBeanCakeTemplate {
// 制作绿豆糕的模板方法
public final void make() {
makeBeanMilk();
addRiceFlour();
addSugar();
steam();
serve();
}
// 制作豆浆
public void makeBeanMilk() {
System.out.println("制作豆浆");
}
// 加入糯米粉
public abstract void addRiceFlour();
// 加入糖
public void addSugar() {
System.out.println("加入糖");
}
// 蒸
public void steam() {
System.out.println("蒸");
}
// 装盘上菜
public void serve() {
System.out.println("装盘上菜");
}
}
// 具体的绿豆糕制作类
public class ConcreteGreenBeanCake extends GreenBeanCakeTemplate {
@Override
public void addRiceFlour() {
System.out.println("加入糯米粉");
}
}
总结
在具有相同或相似流程的业务场景中,使用模板模式可以让代码更加清晰明了,减少代码重复,提高代码的可维护性。同时,模板模式也便于支持开发人员扩展新的流程或步骤,而无需修改核心的抽象父类,避免对现有代码不必要地造成破坏。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java设计模式之模板模式(Template模式)介绍 - Python技术站