- 模式简介
- 代码实现
模式简介
按我个人理解来说,顾名思义嘛,模板方法模式是和模板有关的,一说到模板我便不自觉就想到抽象类、接口了,那么模板方法不就是在父类里定义一些方法,作为一个模板把这些方法延后到子类中实现吗?如此一来,子类就得按照父类这个模板来进行一些方法的实现了。说了一堆..感觉还是没说明白,还是上代码吧....
代码实现
小韦是个初出茅庐的大学生,毕业后进了一个手机壳加工厂工作...工作一个月后,他发现工厂生产不同手机壳的工艺流程其实是一样的,都是先打印摸具、染色、质量检测,最后包装。他发现,同样的工艺流程生产不同手机壳的关键就在于具体工艺的不同实现。
手机壳抽象类
public abstract class PhoneShell {
/**
* 制作手机壳模具
*/
public abstract void makeModel();
/**
* 手机壳染色
*/
public abstract void dye();
/**
* 手机壳质量检测
*/
public abstract void qualityTest();
/**
* 包装手机壳
*/
public void assemble(){
System.out.println("正在进行手机壳制作");
makeModel();
dye();
qualityTest();
System.out.println("手机壳组装完成");
}
}
具体的两款手机壳类
public class HwPhoneShell extends PhoneShell{
@Override
public void makeModel() {
System.out.println("正在制作HwPhoneShell");
}
@Override
public void dye() {
System.out.println("正在给手机壳染红色");
}
@Override
public void qualityTest() {
System.out.println("正在给手机壳做压力测试");
}
}
public class XmPhoneShell extends PhoneShell{
@Override
public void makeModel() {
System.out.println("正在制作XmPhoneShell");
}
@Override
public void dye() {
System.out.println("正在给手机壳染黄色");
}
@Override
public void qualityTest() {
System.out.println("正在给手机壳进行形变测试");
}
}
测试类
public class Woker {
public static void main(String[] args) {
System.out.println("正在启动手机壳的工艺流程,请稍等...");
PhoneShell hwPhoneShell = new HwPhoneShell();
PhoneShell xmPhoneShell = new XmPhoneShell();
System.out.println("进入手机壳工艺流程..");
hwPhoneShell.assemble();
xmPhoneShell.assemble();
System.out.println("两款手机壳制作完毕!");
}
}
过了一会,小韦开始琢磨着为什么要进行统一的工艺流程呢?后来,小韦问了位厂里的老师傅,老师傅语重心长地答道:“你看啊,这个流水线是不是都是生产手机壳的,而手机壳的生产过程中,有些生产方法是一样的,有些是不一样的。为了提升生产效率,我们就把所有手机壳的生产流程统一起来,这样我们就只需要改变那些不一样的工艺就好了。小韦啊,我这样说你懂了吗?”小韦似懂非懂的点了点头。