设计模式-模板方法模式,介绍模板方法模式,及代码实现。
简介
模版方法模式属于行为型设计模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中去,模板方法使得子类可以不改变一个算法的结构便可重定义该算法的某些特定步骤。
特点
模板方法模式是通过把不变行为搬移到超类,去除籽类中重复代码来体现它的优势,也就是模板模式提供了一个很好的代码复用平台。
当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现,我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱了重复的不变行为的纠缠。
角色
- 抽象父类:提取不同代码的抽象方法(在子类实现),模板方法调用此方法,并在模板方法中写入公共的重复代码。
- 实现子类:继承抽象父类,实现自己业务不同的代码
- 调用类:实际应用时,利用类的多态性,获得父类的子类实例,调用模板方法,即可实现业务逻辑。
代码实现
抽象父类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
public abstract class AbstractTemplate {
public abstract void primitiveOperation1();
public abstract void primitiveOperation2();
public void templateMethod() { primitiveOperation1(); primitiveOperation2(); System.out.println("模板方法结束\n"); }
}
|
实现子类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
public class ConcreteClassA extends AbstractTemplate {
@Override public void primitiveOperation1() { System.out.println("具体类A的方法1实现"); }
@Override public void primitiveOperation2() { System.out.println("具体类A的方法2实现"); }
}
public class ConcreteClassB extends AbstractTemplate {
@Override public void primitiveOperation1() { System.out.println("具体类B的方法1实现"); }
@Override public void primitiveOperation2() { System.out.println("具体类B的方法2实现"); }
}
|
客户端调用类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
public class TemplateClient {
public static void main(String[] args) {
AbstractTemplate abstractTemplateA = new ConcreteClassA(); abstractTemplateA.templateMethod();
AbstractTemplate abstractTemplateB = new ConcreteClassB(); abstractTemplateB.templateMethod();
} }
|