模板方法模式

a 夏天 提交于 2020-12-10 03:07:06

模板方法模式:定义一个算法中的操作框架,而将一些步骤延迟到子类中。使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。

模板方法模式的适用场景:

  • 多个子类有逻辑相同的共有方法。
  • 可以明确操作步骤的算法。
  • 有相同的代码需要重构时。

模板方法模式组件:

  • AbstractTemplate(抽象模板角色):定义了一系列的方法,提供一个操作的模板
  • ConcreteTemplate(具体模板角色):实现抽象模板中的方法

模板方法模式组件示例:
抽象模板角色:

public abstract class HotDrinks {

    protected final void makeHotDrink() {
        boilWater();
        brewDrinks();
        pourInCup();
        addSpices();
    }

    protected final void boilWater() {
        System.out.println("Boiling water");
    }

    protected abstract void brewDrinks();

    protected final void pourInCup() {
        System.out.println("Pouring into cup");
    }

    protected abstract void addSpices();
}

具体模板角色:

public class MilkCoffee extends HotDrinks {
    @Override
    protected void brewDrinks() {
        System.out.println("Dripping Coffee through filter");
    }

    @Override
    protected void addSpices() {
        System.out.println("Pour milk into the coffee");
    }
}
public class Tea extends HotDrinks {
    @Override
    protected void brewDrinks() {
        System.out.println("Steeping the tea");
    }

    @Override
    protected void addSpices() {
        System.out.println("Adding lemon");
    }
}

模板方法模式总结:

  • 封装不变部分,扩展可变部分
  • 提取公共代码,便于维护
  • 行为由父类控制,子类实现
  • 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!