为了账号安全,请及时绑定邮箱和手机立即绑定

Java设计模式(20)----------模板方法模式

介绍

模版方法模式的思想是在抽象类中定义程序的主体框架,在子类中实现具体的细节,是一种行为型设计模式。

实现:模版方法模式中存在两个角色,抽象类和实现类。在抽象类中,定义了程序的主体结构或者流程,该方法可以设置成final的,这样子类中就无法重写。而对于其他的细节的方法定义,则延迟到实现类中。

使用场景:

  • 比如做饭,都需要开火,架锅,放入食材这样一套的主体流程,这个可以放在抽象类中。但是开多大的火,使用哪种锅,放入什么食材,则放在子类中,因为每种菜品的的制作方法都不一样。
  • 比如吃饭。都要先洗手,拿餐具,吃饭。主体流程都是统一的。但是用什么东西洗手,使用什么餐具吃饭,吃什么饭,都是存在多种情况的。
案例
背景

以每天的生活工作为例。主体框架就是,吃早饭,上班,吃午饭,上班,吃晚饭。具体实现的细节包含三餐吃什么,上班做什么。

实现

抽象类

public abstract class Life
{
    abstract void makeBreakfast();
    abstract void makeLunch();
    abstract void makeDinner();
    abstract void MorningWork();
    abstract void AfternoonWork();

    public final void live()
    {
        makeBreakfast();
        MorningWork();
        makeLunch();
        AfternoonWork();
        makeDinner();
    }
}

子类

public class Chairman extends Life
{
    @Override
    void makeBreakfast()
    {
        System.out.println("早餐:吃西餐");
    }

    @Override
    void makeLunch()
    {
        System.out.println("午餐:吃日本料理");
    }

    @Override
    void makeDinner()
    {
        System.out.println("晚餐:吃满汉全席");
    }

    @Override
    void MorningWork()
    {
        System.out.println("上午工作:处理公司内部事务");
    }

    @Override
    void AfternoonWork()
    {
        System.out.println("下午工作:处理公司外部公关");
    }
}
public class Programmer extends Life
{
    @Override
    void makeBreakfast()
    {
        System.out.println("早餐:肯德基");
    }

    @Override
    void makeLunch()
    {
        System.out.println("午餐:麦当劳");
    }

    @Override
    void makeDinner()
    {
        System.out.println("晚餐:德克士");
    }

    @Override
    void MorningWork()
    {
        System.out.println("上午工作:写程序");
    }

    @Override
    void AfternoonWork()
    {
        System.out.println("下午工作:调试程序");
    }
}

验证程序

public class Demo
{
    public static void main(String[] args)
    {
        Programmer programmer = new Programmer();
        programmer.live();
        System.out.println("");

        Chairman chairman = new Chairman();
        chairman.live();
    }
}

运行结果

早餐:肯德基
上午工作:写程序
午餐:麦当劳
下午工作:调试程序
晚餐:德克士

早餐:吃西餐
上午工作:处理公司内部事务
午餐:吃日本料理
下午工作:处理公司外部公关
晚餐:吃满汉全席

Process finished with exit code 0

总结

优点:将不变的主体部分提取到抽象类中,作为模版方法,便于维护

点击查看更多内容
9人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1万
获赞与收藏
1426

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消