模板方法模式(Template Method) 定义一个操做中算法的骨架,而将一些步骤延迟到子类中。模板方法能够不改变一个算法的结构便可从新定义该算法的某些特定步骤。
java
类型:形为型模式 git
顺口溜:中访策备迭 观模命状职解github
package com.amosli.dp.behavior.template; public abstract class AbstractClass { public void templateMethod(){ primitiveMethod1(); primitiveMethod2(); } public abstract void primitiveMethod1(); public abstract void primitiveMethod2(); } package com.amosli.dp.behavior.template; public class ConcreteClassA extends AbstractClass{ @Override public void primitiveMethod1() { System.out.println("ConcreteClassA primitive method 1..."); } @Override public void primitiveMethod2() { System.out.println("ConcreteClassA primitive method 2..."); } } package com.amosli.dp.behavior.template; public class ConcreteClassB extends AbstractClass{ @Override public void primitiveMethod1() { System.out.println("ConcreteClassB primitive method 1..."); } @Override public void primitiveMethod2() { System.out.println("ConcreteClassB primitive method 2..."); } } package com.amosli.dp.behavior.template; public class Client { public static void main(String[] args) { AbstractClass abstractClass = new ConcreteClassA(); abstractClass.templateMethod(); abstractClass = new ConcreteClassB(); abstractClass.templateMethod(); } }
当不变和可变的行为在方法的子类中混合在一块儿时,不变的行为就会在子类中重复出现。咱们能够经过模板方法模式将这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠结。算法
模板方法所不变的行为搬到超类,去除子类中的重复代码,提供了一个很好了代码复用平台;ide
将不变行为集成到超类中,当类的行为比较复杂时,对于超类的管理和扩展将会愈来愈复杂,因此使用模板方法模式时,切记对于不对的类分配不一样的职责(SRP)。
spa
本系列文章源码地址,https://github.com/amosli/dp 欢迎Fork & Star !!code