继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

道可
关注TA
已关注
手记 47
粉丝 1万
获赞 1426
介绍

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

实现:模版方法模式中存在两个角色,抽象类和实现类。在抽象类中,定义了程序的主体结构或者流程,该方法可以设置成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

总结

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

打开App,阅读手记
9人推荐
发表评论
随时随地看视频慕课网APP