行为型模式主要涉及算法和对象间的职责分配。通过使用对象组合,行为型模式可以描述一组对象应该如何协作来完成一个整体任务。
    模板(Template)方法:定义一个算法的骨架,将一些操作步骤延迟到子类中实现,使得子类可以再不改变算法骨架的情况下,重定义某些特定的步骤。
    优点:

    1. 封装了不变的部分,扩展子类的部分
    2. 便于代码复用,满足开闭原则

    缺点:

    1. 每个实现都需要定义一个子类。容易使类数量变高
    2. 依赖抽象实现,子类执行结果影响父类结果,这是一种反向控制的结构,不利于理解

    示例:
    我们现在有个画板,需要绘制一些图形,而绘制的动作就可以交给子类来实现

    1. public static void main(String[] args) {
    2. Artboard artboard = new Circle();
    3. artboard.draw();
    4. }
    5. // 画板
    6. abstract static class Artboard{
    7. // 绘画
    8. public void draw(){
    9. // 画一个圆形
    10. drawCircle();
    11. }
    12. // 绘制圆形
    13. abstract void drawCircle();
    14. }
    15. static class Circle extends Artboard{
    16. @Override
    17. void drawCircle() {
    18. System.out.println("绘制一个圆形");
    19. }
    20. }

    而如果我们需要扩展,则只需要新增一个子类即可

    1. public static void main(String[] args) {
    2. Artboard artboard = new RedCircle();
    3. artboard.draw();
    4. }
    5. static class RedCircle extends Artboard{
    6. @Override
    7. void drawCircle() {
    8. System.out.println("绘制一个红色圆形");
    9. }
    10. }