目录

模板方法模式

模板方法模式


前言

模板方法模式,就如同其名字一样,定义了方法的基本骨架。其定义了算法/方法的骨架,并且向外部开放了一些需要由子类来负责具体实现的算法/方法。其主要包含了模板方法、基本方法和抽象方法,模板方法就是一个骨架,可能由多个基本方法和抽象方法组成,而基本方法则是类中自己实现的方法,抽象方法就是需要被多个类具体实现的方法。我们需要使用抽象模板类,只需要定义具体类继承抽象类,并且重写需要具体实现的方法即可,可以提高代码的复用性。

实现

存在一个抽象模板水果类,其存在抽象方法吃水果,而吃水果需要每个方法一样的洗水果,每个方法不同的处理水果,最后一样的吃果实,如下:


public abstract class Fruit {
    /**
     * 模板方法,记录算法的骨架
     * */
    public final void eat(){
        wash();
        handler();
        eatFruit();
    }

    /**
     * 抽象方法,由子类实现
     * */
    abstract void handler();


    /**
     * 基本方法
     * */
    void wash(){
        System.out.println("洗水果");
    }

    void eatFruit(){
        System.out.println("吃水果");
    }
}

public class Apple extends Fruit{
    @Override
    void handler() {
        System.out.println("切皮");
    }
}

public class Watermelon extends Fruit{
    @Override
    void handler() {
        System.out.println("切块");
    }
}

优缺点

优点:

1:提高代码的复用性。抽象模板类包含一些对象需要复用的方法,只需要继承就可以使用

2:符合开闭原则。每个子类只需要重写抽象方法实现自己具体的逻辑即可

缺点:

1:子类创建过多。每次需要不同的具体方法实现都需要创建一个信类

2:模板方法修改困难。模板方法为了防止被修改使用了final声明,如果对模板方法进行修改,修改了抽象方法的调用,可能会影响到所有子类的实现