场景使用类:
public class PatternTest { public static void main(String[] args) { AbstractPatternClass abstractPatternClass = new ConcreteClass(); // 调用模板方法 abstractPatternClass.templateMethod(); } }钩子方法我们上面已经说过了,相信聪明的你知道如何使用,这里就不再赘述了。
注意点父类中的基本方法尽量设计为 protected 类型,符合迪米特法则。
父类中的模板方法一般设置为 final,不允许子类覆写。这样的目的一个是为了避免子类恶意操作,一个是为了模板的共性。
当你在写代码经常用到复制和粘贴快捷键时,你就要考虑是不是可以进行抽取。
当你修改一个地方的时候,发现其他地方也要连带修改,也需要考虑一下。
多个子类有公共方法,并且逻辑基本相同。
复杂的一些算法之类的,可以让子类通过基本方法传递一些参数,核心逻辑放在模板方法里面。
重构项目的时候,也可以考虑一下把相同代码抽取到父类,通过钩子方法定制化模板。
最后一点就是注意不要滥用设计模式,不要为了设计而设计
参考资料:
设计模式之禅(第2版)