模版方法模式又称为模版模式,是指定义了一个算法的骨架,并允许子类为一个或者多个步骤提供实现。模版模式使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤,属于行为性设计模式。
模版模式适应于以下场景:
- 一次性实现一个算法的不变部分,并将可变的行为交给子类来实现。
- 个子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复。
我们的日常生活中,此类的应用场景非常多,比如办理入职流程:填写登记表--->签订劳动合同----->建立花名册--->办理工牌---->安排工位等。又或者平时在家中做饭:去菜市场买菜--->洗菜--->炒菜--->吃饭---->洗碗筷 等。这些可以说都是固定的流程,是不能随意打乱的。
下面我们还是以家庭做饭来实现一个例子,毕竟这是我们每天都要做的,相对来说比较熟悉。
一、首先创建做饭的整体流程的抽象类
public abstract class Cook{
protected final void cook(String food){
buyFood(food);
this.washFood();
this.cooking();
this.eat();
this.aftermath();
}
// 买菜
abstract void buyFood(Stirng food);
final void washFood(){
System.out.println("把买回来的菜清洗一下");
}
final void cooking(){
System.out.println("开始烧制菜品");
}
final void eat(){
System.out.println("开始吃饭");
}
final void aftermath(){
System.out.println("善后工作,洗碗、擦桌子等……");
System.out.println();
}
}
二、创建做饭的实现类
public class CookImpl extends Cook{
void buyFood(String food){
System.out.println("去菜市场买"+food);
}
}
三、客户端测试代码如下:
public class test{
public static void main (String[] args){
Cook cook = new CookImpl();
cook.cook("猪肉、白菜");
Cook cook2 = new CookImpl();
cook2.cook("牛肉、鸡肉");
}
}
四、执行结果
去菜市场买猪肉、白菜
把买回来的菜清洗一下
开始烧制菜品
开始吃饭
善后工作,洗碗、擦桌子等……
去菜市场买牛肉、鸡肉
把买回来的菜清洗一下
开始烧制菜品
开始吃饭
善后工作,洗碗、擦桌子等……
通过这个例子我们应该大致了解到,洗菜、烧菜、吃饭、善后工作等都是一些公共的行为,所以我们放在抽象类中,而对于买菜来说,每家买的菜都是不一样的,所以需要放到子类中来定制实现。
此文介绍到此结束,只做为简单理解,不做深入探讨!!!