《设计模式》-- 模板方法模式

模板方法模式

认识

模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。

思考

把程序中不变的部分抽象出来,放在抽象父类中,进行公共的实现,把变化的部分分离出去,用接口来封装隔离,将具体的实现延迟到子类,还通过父类的定义约束了子类的行为,从而使系统能有更好的复用性和扩展性

实质:固定算法骨架,子类可以置换掉父类的可变部分,但是子类却不可以改变模板方法所代表的顶级逻辑

使用场景

  • 子类具有公共的行为,抽象出来放入父类中,避免代码重复

  • 父类固定了算法骨架,具体的实现由不同的子类去具体实现

优缺点

  • 优点:实现代码复用

  • 缺点:骨架固定不容易升级

UML图

子类实现抽象类,抽象类中的定义了所有的行为,对公共的行为做出了实现,抽象方法由子类具体实现

image

代码实现

 父类中定义的方法分为三种:抽象方法(Abstract Method)、具体方法(Concrete Method)和钩子方法(Hook Method)。

  ●  抽象方法:一个抽象方法由抽象类声明,由具体子类实现。在Java语言里抽象方法以abstract关键字标示。

  ●  具体方法:一个具体方法由抽象类声明并实现,而子类并不实现或置换。

  ●  钩子方法:一个钩子方法由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。

//抽象父类
public abstract class AbstractTemplate {
    /**
     * 模板方法
     */
    public void templateMethod(){
        //调用基本方法
        abstractMethod();
        hookMethod();
        concreteMethod();
    }
    /**
     * 抽象方法(由子类实现)
     */
    protected abstract void abstractMethod();
    /**
     * 钩子方法(由子类覆盖)
     */
    protected void hookMethod(){}
    /**
     * 基本方法(已经实现)
     */
    private final void concreteMethod(){
        //业务相关的代码
    }
}
//子类
public class ConcreteTemplate extends AbstractTemplate{
    //基本方法的实现
    @Override
    public void abstractMethod() {
        //业务相关的代码
    }
    //重写父类的方法
    @Override
    public void hookMethod() {
        //业务相关的代码
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值