模板方法模式
目录
模板方法模式
前言
模板方法模式,就如同其名字一样,定义了方法的基本骨架。其定义了算法/方法的骨架,并且向外部开放了一些需要由子类来负责具体实现的算法/方法。其主要包含了模板方法、基本方法和抽象方法,模板方法就是一个骨架,可能由多个基本方法和抽象方法组成,而基本方法则是类中自己实现的方法,抽象方法就是需要被多个类具体实现的方法。我们需要使用抽象模板类,只需要定义具体类继承抽象类,并且重写需要具体实现的方法即可,可以提高代码的复用性。
实现
存在一个抽象模板水果类,其存在抽象方法吃水果,而吃水果需要每个方法一样的洗水果,每个方法不同的处理水果,最后一样的吃果实,如下:
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声明,如果对模板方法进行修改,修改了抽象方法的调用,可能会影响到所有子类的实现