1.首先了解一下什么是模板,模板我理解的就一种套路,比如我们经常看小说的,就会经常吐槽小说
都是同一种套路,少年家道中落,筋脉被废,掉下山崖,捡到神功秘籍等等。套路是这么一个套路,
但是内容还是不一样的。对应的模板方法模式的概念就出来了。
总结(画重点哩):模板方法模式就是:公共的方法,不同的实现。
2.核心思想是知道了,那么使用场景是什么呢?什么场景又会满足又有相同的逻辑,又需要有不同的
实现呢?最先冒出来的就是一些公共的代码逻辑,我们会封装成一个公共方法,供不同的接口调用。
这种思想是满足的,但是还是有个缺点,在每次需要调用这个公共方法的时候,不同的接口里面,
都会有这么一段公共方法的代码。万一有一天你这公共方法的名称要改,那不是要改很多地方。
3.场景聊完了,那么怎么去实现一个模板方法模式哩?
a.首先思考一下,在java里面什么能满足公共的方法,不同的实现?也就只有抽象类里面的抽象
方法吧,父类的抽象方法不需要去实现,交由继承的子类去实现,这不就是多态的核心概念嘛
b.创建一个接口XXXInterface,里面一个方法XXXmethod(),面向对象编程嘛,接口少不了哈
c.定义一个抽象模板类TemplateClass,实现接口XXXInterface的方法,里面还需要有两个方
法,一个是将公共的逻辑抽取出来的方法,一个是需要不同子类去实现的抽象方法,将这两个
方法放到需要实现的XXXmethod()方法里
public static abstract class TemplateClass implements XXXInterface{
public final void XXXmethod(){
commonLogic();
patternMethod();
}
private void commonLogic(){
System.out.println("公共逻辑");
}
protected abstract void patternMethod();
}
e.然后不同的子类,继承这个抽象的模板类,并实现模板类的抽象方法
f.最后我们在使用这个模板方法模式的时候,如下,即可
TemplateClass templateClassA = new AClass();
templateClassA.XXXmethod();
TemplateClass templateClassB = new BClass();
templateClassB.XXXmethod();
TemplateClass templateClassC = new CClass();
templateClassC.XXXmethod();