Java设计模式----------模板方法模式

1、介绍

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

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

使用场景:

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

2、案例

2.1、背景

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

2.2、实现

抽象类

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

3、总结

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

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页