一.概念
模板方法模式准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。
二.设计原则
好莱坞原则 别调用(打电话给)我们,我们会调用(打电话给)你。
三.举例子
现在有一个流程,知道他有三步骤,但不知道具体哪三步。这时候可以定义一个模板,模板里有三个方法。这三个方法可以根据具体步骤去实现(那就是子类了)。
/**
* 模板方法模式 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤
* 应用场景:
* 1) 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
* 2) 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。
* 最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
* ps:个人觉得就是用了抽象对象继承实现而已啊。。。。
*/
public class TemplateTest {
//首先定义一个模板
abstract class MakeTemplate {
public abstract void first();
public abstract void second();
public abstract void third();
public void proceed() {
first();
second();
third();
}
}
//具体定义,玩游戏
class PlayGame extends MakeTemplate {
@Override
public void first() {
System.out.println("打开游戏机。。。");
}
@Override
public void second() {
System.out.println("玩游戏机。。。");
}
@Override
public void third() {
System.out.println("关闭游戏机。。。");
}
}
//测试
public static void main(String[] args) {
PlayGame game = new TemplateTest().new PlayGame();
game.proceed();
}
}
运行结果:
四.总结
如果一个系统里都是按一个流程去操作的,那么把这个流程抽象出来当作一个模板,然后对应方法让子类去实现即可。个人觉得就是用了抽象对象继承实现而已啊。。