Java设计模式之行为型模式 | 模板方法

42 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 21 天,点击查看活动详情

觉得对你有益的小伙伴记得点个赞+关注

后续完整内容持续更新中

希望一起交流的欢迎发邮件至javalyhn@163.com

1. 模板方法的定义

在模板模式中,一个抽象类公开定义了执行它的方法的方式模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。

2. 模板方法中的角色

  • 抽象类/抽象模板(Abstract Class)
  • 具体子类/具体实现(Concrete Class)

3. 模板方法使用场景

  • Spring的整个继承体系都基本用到模板方法
    • BeanFactory.getBean(1,2,3,4)--A1---A2---A3---A4(全部被完成)
  • JdbcTemplate、RedisTemplate都允许我们再扩展.....
  • 我们自己的系统也应该使用模板方法组织类结构

4. 模板方法的实现

image.png

CookTemplate

/**
 * 1、定义模板
 */
public abstract class CookTemplate {

    /**
     * 定义算法:  定义好了模板
     * 父类可以实现某些步骤
     * 留关键给子类
     */
    public void cook(){
        //定义算法步骤
        heating();   //v
        addfood();
        addsalt();
        stirfry();   //v
        end();      //v
    }

    //加热方法
    public void heating(){
        System.out.println("开火...");
    };

    //添加食物
    public abstract void addfood();

    //加盐
    public abstract void addsalt();

    //翻炒
    public  void stirfry(){
        System.out.println("翻炒中...");
    };

    //出锅
    public  void end(){
        System.out.println("出锅....");
    };


}

AutoCookMachine

public class AutoCookMachine extends CookTemplate{

    @Override
    public void addfood() {
        System.out.println("放了三个小白菜");
    }

    @Override
    public void addsalt() {
        System.out.println("放了三勺盐");
    }
}

MainTest

public class MainTest {

    public static void main(String[] args) {

        AutoCookMachine cookMachine = new AutoCookMachine();

        cookMachine.cook();

    }
}

image.png