目录
- 一、背景介绍
- 二、思路&方案
- 三、过程
- 1.模板方法模式简介
- 2.模板方法模式的类图
- 3.模板方法模式代码
- 4.模板方法模式中的父类为抽象类,为什么不是接口?
- 5.模板方法模式中方法级别的单一职责
- 四、总结
- 五、升华
一、背景介绍
最近公司在做颗粒业务的时候,子类中有很多公共的行为,使得维护非常繁琐;于是就想到了设计模式中的模板方法模式。
二、思路&方案
- 1.模板方法模式简介
- 2.模板方法模式的类图
- 3.模板方法模式代码
- 4.模板方法模式中的父类为抽象类,为什么不是接口?
- 5.模板方法模式方法级别的单一职责
三、过程
1.模板方法模式简介
模板方法模式(TemplateMethod):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
2.模板方法模式的类图
3.模板方法模式代码
package com.a7DesignPattern.a3BehaviorType.a02TemplateMethod;/*** 功能描述:** @Author:makang* @Date: 2021/5/26 17:29*/
public class Client {public static void main(String[] args) {AbstractClass abstractClass = new ConcreteClass();abstractClass.TemplateMethod();}
}
package com.a7DesignPattern.a3BehaviorType.a02TemplateMethod;/*** 功能描述:** @Author:makang* @Date: 2021/5/26 17:26*/
public abstract class AbstractClass {public abstract void PrimitiveOperation1();public abstract void PrimitiveOperation2();public void TemplateMethod(){PrimitiveOperation1();PrimitiveOperation2();}
}
package com.a7DesignPattern.a3BehaviorType.a02TemplateMethod;/*** 功能描述:** @Author:makang* @Date: 2021/5/26 17:28*/
public class ConcreteClass extends AbstractClass{@Overridepublic void PrimitiveOperation1() {System.out.println("AbstractClass 中PrimitiveOperation1方法具体的实现");}@Overridepublic void PrimitiveOperation2() {System.out.println("AbstractClass 中PrimitiveOperation2方法具体的实现");}
}
4.模板方法模式中的父类为抽象类,为什么不是接口?
答:1.要在父类中定义算法骨架,而这个算法骨架的实现是需要通过抽象类的普通方法来实现的 2.接口是对行为的抽象,如果用接口就与模板方法模式定义中的将一些步骤延迟到子类相悖了
5.模板方法模式中方法级别的单一职责
方法要足够的单一,这样才使得算法的骨架得以通过组合单一的方法实现;另外还使得可将单一的方法延迟到子类去实现
四、总结
- 1.具体模式:父类实现算法骨架的复用,子类实现部分步骤的不同
- 2.七大原则:对于子类而言,只需要存在和重新定义需要它管理的特定步骤即可;更符合单一职责
- 3.软件工程:父类中算法骨架的统一,使得后期对于算法骨架的低维护得以落实
五、升华
对于软件工程的落地,七大原则的遵守,特定场景的完美实现。