一、概念
模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
比如定义一个操作中的算法的骨架,将步骤延迟到子类中。模板方法使得子类能够不去改变一个算法的结构即可重定义算法的某些特定步骤。
二、实现
模式中的角色
抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。
抽象类:
publicabstractclassAbstractClass {// 基本方法protectedabstractvoiddoSomething();// 基本方法protectedabstractvoiddoAnything();// 模板方法publicfinalvoidtemplateMethod() {/** 调用基本方法,完成相关的逻辑*/this.doSomething();this.doSomething();}}具体类:
publicclassConcreteClass1extendsAbstractClass {// 基本方法protectedabstractvoiddoSomething() {// 业务逻辑}// 基本方法protectedabstractvoiddoAnything() {// 业务逻辑}}publicclassConcreteClass2extendsAbstractClass {// 基本方法protectedabstractvoiddoSomething() {// 业务逻辑}// 基本方法protectedabstractvoiddoAnything() {// 业务逻辑}}测试:
publicstaticvoidmain(String[] args) {AbstractClass class1 =newConcreteClass1();AbstractClass class2 =newConcreteClass2();// 调用模板方法class1.templateMethod();class2.templateMethod();}
三、优缺点
模板方法多个子类有公有的方法,并且逻辑基本相同时,重复的算法,可以把核心算法设计为模板方法,周边的相关细节功能由各个子类实现
模板方法模式的优点:
1.封装不变部分,扩展可变部分
2.提取公共部分代码,便于维护
3.行为有父类控制,子类实现
模板方法模式的缺点
1.容易带来代码阅读的难度
随时随地看视频