首页 > 代码库 > 设计模式7:模板方法模式
设计模式7:模板方法模式
有时候,我们需要定义某个方法,这个方法在高层次来看是相同的,但是里面几个具体步骤有可能有些不同。
一种实现方法是父类定义一个虚方法,由多个子类具体实现。但是这样做的话,不变的和可变的行为在子类中是混合在一起的,造成代码的大量重复。
这时候我们需要使用模板方法模式。
模板方法模式:定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构,即可重定义算法的某些特定步骤。
这个模式通过将不变的行为搬移到父类,去除子类中的重复代码。
UML图:
在父类中,templateMethod是模板方法,需要调用primitiveMethod1和primitiveMethod2两个虚方法。
子类中对这两个虚方法给出了具体实现。
代码:
AbstractClass及其子类:
public abstract class AbstractClass { public void templateMethod() { primitiveMethod1(); primitiveMethod2(); System.out.println("templateMethod"); } protected abstract void primitiveMethod1(); protected abstract void primitiveMethod2(); } public class ConcreteClass1 extends AbstractClass { @Override protected void primitiveMethod1() { System.out.println("ConcreteClass1.primitiveMethod1"); } @Override protected void primitiveMethod2() { System.out.println("ConcreteClass1.primitiveMethod2"); } } public class ConcreteClass2 extends AbstractClass { @Override protected void primitiveMethod1() { System.out.println("ConcreteClass2.primitiveMethod1"); } @Override protected void primitiveMethod2() { System.out.println("ConcreteClass2.primitiveMethod2"); } }
Demo:
public class TemplateDemo { public static void main(String[] args) { AbstractClass class1 = new ConcreteClass1(); class1.templateMethod(); AbstractClass class2 = new ConcreteClass2(); class2.templateMethod(); } }
设计模式7:模板方法模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。