概述

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

UML

代码

package com.ans;

abstract class Game {

    abstract public void init();
    abstract public void start();
    abstract public void end();

    public void play() {
        init();
        start();
        end();
    }
}

class Badminton extends Game {
    @Override
    public void init() {
        System.out.println("进入羽毛球场,必须等两个人都到场");
    }

    public void start() {
        System.out.println("开始打羽毛球");
    }

    public void end() {
        System.out.println("羽毛球场退场");
    }
}

class BasketBall extends Game {
    @Override
    public void init() {
        System.out.println("等齐五个人,准备打篮球");
    }

    @Override
    public void start() {
        System.out.println("开始打篮球");
    }

    @Override
    public void end() {
        System.out.println("篮球场退场");
    }
}

public class Template {
    public static void main(String[] args) {
        Game Basketballgame = new BasketBall();
        Game Badmintongame = new Badminton();
        Basketballgame.play();
        System.out.println("=======================");
        Badmintongame.play();

    }
}

运行结果:

等齐五个人,准备打篮球
开始打篮球
篮球场退场
=======================
进入羽毛球场,必须等两个人都到场
开始打羽毛球
羽毛球场退场

分析

我的理解是:模板方法,顾名思义,就是打造了一个做东西或者事务进展的模板,用一个抽象类把怎么做或者某事务的进展流程。

至于具体的实现,具体细节,留给子类来实现。

就像上面的例子里面:

比赛的流程大致都一样:准备,开始,结束。所以把这三个方法都封装在一个play方法中。

但是怎么准备,怎么开始,怎么结束,则因子类的实现的不同而不同。

维基百科上的定义:

In software engineering, the template method pattern is a behavioral design pattern that defines the program skeleton of an algorithm in a method, called template method, which defers some steps to subclasses.

翻译过来就是:模板模式是一种行为设计模式,这定义了方法的中算法框架,但是一些步骤可能因子类不同而不同。