admin 管理员组

文章数量: 1086019

【设计模式

模板方法

  • 一、定义
  • 二、类图
  • 三、代码
    • 抽象模板类
    • 具体模板类
    • 场景类
    • 结果:
  • 四、优缺点
    • 优点:
    • 缺点:

一、定义

	模板方法模式的核心设计思路,是通过在抽象类中定义抽象方法的执行顺序,并将抽象方法设定为只有子类实现,
但不设计独⽴立访问的方法。简单说也就是把你安排的明明白白的。

二、类图

  • 模板方法(templateMethod): 抽取子类公共逻辑,并定义子类调用顺序
  • 基本方法(doSomething/doAnything): 子类独有的具体实现逻辑

三、代码

抽象模板类

public abstract class AbstractClass {//基本方法protected abstract void doSomething();//基本方法protected abstract void doAnything();//模板方法 抽取子类公共逻辑public void templateMethod(){System.out.println("实现子类公共逻辑");doSomething();doAnything();}}

具体模板类

public class ConcreteLogicOne extends AbstractClass {@Overrideprotected void doSomething() {System.out.println("ConcreteLogicOne逻辑处理1");}@Overrideprotected void doAnything() {System.out.println("ConcreteLogicOne逻辑处理2");}
}
public class ConcreteLogicTwo extends AbstractClass {@Overrideprotected void doSomething() {System.out.println("ConcreteLogicTwo逻辑处理1");}@Overrideprotected void doAnything() {System.out.println("ConcreteLogicTwo逻辑处理2");}
}

场景类

public class testController {public static void main(String[] args) {AbstractClass concreteLogicOne = new ConcreteLogicOne();concreteLogicOne.templateMethod();ConcreteLogicTwo concreteLogicTwo = new ConcreteLogicTwo();concreteLogicTwo.templateMethod();}
}

结果:

四、优缺点

优点:

  • 封装不变部分,扩展可变部分,提高扩展性
  • 提取公共部分代码,便于维护,提高复用性
  • 行为由父类控制,子类实现,符合开闭原则

缺点:

  • 抽象类继承缺点,父类增加了方法,子类需要都实现
  • 子类影响父类,子类返回数据到父类,父类进行逻辑处理。子类间接影响了父类结果,提高了阅读代码复杂度
  • 每实现具体逻辑都需要增加子类,导致类数量增加,提高了系统复杂性

本文标签: 设计模式