模板方法(Template Method)模式

模板方法(Template Method)模式

模板方法模式实际上就是封装了一个固定流程,定义该流程有几个步骤组成,具体的步骤可以由子类进行不同的实现。

例如:学生放假了回家团聚的一个场景
1.学校放假了
2.学生乘坐各种交通工具
3.到家团聚

在这个场景中,流程是一样的,只不过是学生们乘坐的交通工具不一样,有的乘坐火车,有的乘坐飞机等。
首先,我们定义抽象的模板方法,模板中goHomeOnVacation()定义了固定的流程,还有“放假”和“到家团聚”的固定方法

具体实现

public abstract class Vacationer {

    // 放假了
    protected final void holiday() {
        System.out.println("我放假了!");
    }

    // 回家的方式
    protected abstract void travel();

    // 到家团聚
    protected final void home() {
        System.out.println("我到家了!");
    }

    // 放假回家模板流程
    public void goHomeOnVacation() {
        holiday();
        travel();
        home();
    }

}

由子类实现不同的回家方式

public class byAir extends Vacationer{
    @Override
    protected void travel() {
        System.out.println("我坐飞机回家!");
        System.out.println("坐飞机中······");
    }
}

public class byTrain extends Vacationer{
    @Override
    protected void travel() {
        System.out.println("我坐火车回家!");
        System.out.println("坐火车中······");
    }
}

我们编写如下代码进行测试。

public class Main {
    public static void main(String[] args) {
        System.out.println("学校放假了,学子们准备回家与家人团聚······");
        Vacationer zhangshan = new ByAir();
        Vacationer lisi = new ByTrain();

        System.out.println("张三准备回家了:");
        zhangshan.goHomeOnVacation();

        System.out.println("李四准备回家了:");
        lisi.goHomeOnVacation();

        System.out.println("学子们都到家里与家人团聚·······");
    }
}

输出结果:

学校放假了,学子们准备回家与家人团聚······
张三准备回家了:
我放假了!
我坐飞机回家!
坐飞机中······
我到家了!
李四准备回家了:
我放假了!
我坐火车回家!
坐火车中······
我到家了!
学子们都到家里与家人团聚·······

模板方法有如下功能

  1. 能够解决代码冗余问题。
  2. 把某些算法步骤延迟到子类,子类可以根据不同情况改变/实现这些方法,而子类的新方法不会引起既有父类的功能变化。
  3. 易于扩展。我们通过创建新类,实现可定制化的方法就可以扩展功能,例如有人乘坐轮船回家。
  4. 父类提供了算法的框架,控制方法的执行流程,而子类不能改变算法流程,子类方法的调用由父类模板方法决定。
  5. 父类可以把那些重要的、不允许改变的方法屏蔽掉,不让子类去覆写他们,我们声明这些方法为final或者是private即可。

我们常常使用的生命周期方法就是使用的模板方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丿青草ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值