设计模式之模板方法模式

115 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

源码在分支master

模板方法模式

image.png

image.png

结构

image.png

代码

/*******************************************************************************
 * Package: com.example.demo.design.template
 * Type:    AbsBeanMlik
 * Date:    2022-04-10 17:43
 *
 * Copyright (c) 2022 HUANENG GUICHENG TRUST CORP.,LTD All Rights Reserved.
 *
 * You may not use this file except in compliance with the License.
 *******************************************************************************/
package com.example.demo.design.template;

/**
 * 功能描述: 制作不同口味豆浆
 * 口味:发生改变 (抽象)
 * 制作过程 都是相同的 (模板)
 *
 * 模板方法:行为型模式
 *
 *
 * @author Songxianyang
 * @date 2022-04-10 17:43
 */
public abstract class AbsBeanMilk {
    
    
    /**
     * 口味 调味料
     */
    public abstract void dressing();
    
    /**
     * 制作模板
     */
    public void template() {
      //选材
        putBean();
      // 什么口味
        dressing();
      // 豆浆机开始打磨
        beanMachine();
    }
    
    /**
     * 什么类型 的 大豆
     */
    public abstract void putBean();
    
    /**
     *
     */
    public void beanMachine() {
        System.out.println("中国制造:SteveCode牌 豆浆机 开始打磨");
    }
    
}
/*******************************************************************************
 * Package: com.example.demo.design.template
 * Type:    Strawberry
 * Date:    2022-04-10 17:52
 *
 * Copyright (c) 2022 HUANENG GUICHENG TRUST CORP.,LTD All Rights Reserved.
 *
 * You may not use this file except in compliance with the License.
 *******************************************************************************/
package com.example.demo.design.template;

/**
 * 功能描述: 草莓味
 *
 * @author Songxianyang
 * @date 2022-04-10 17:52
 */
public class Strawberry extends AbsBeanMilk{
    @Override
    public void dressing() {
        System.out.println("草莓味");
    }
    
    @Override
    public void putBean() {
        System.out.println("普通大豆");
    }
}
/*******************************************************************************
 * Package: com.example.demo.design.template
 * Type:    A
 * Date:    2022-04-10 17:42
 *
 * Copyright (c) 2022 HUANENG GUICHENG TRUST CORP.,LTD All Rights Reserved.
 *
 * You may not use this file except in compliance with the License.
 *******************************************************************************/
package com.example.demo.design.template;

/**
 * 功能描述:模板方法模式
 *
 * @author Songxianyang
 * @date 2022-04-10 17:42
 */
public class Test {
    public static void main(String[] args) {
        AbsBeanMilk strawberry = new Strawberry();
        strawberry.template();
    
        System.out.println("-------");
        AbsBeanMilk watermelon = new Watermelon();
        
        watermelon.template();
    }
}
/*******************************************************************************
 * Package: com.example.demo.design.template
 * Type:    Watermelon
 * Date:    2022-04-10 17:54
 *
 * Copyright (c) 2022 HUANENG GUICHENG TRUST CORP.,LTD All Rights Reserved.
 *
 * You may not use this file except in compliance with the License.
 *******************************************************************************/
package com.example.demo.design.template;

/**
 * 功能描述: 西瓜味
 *
 * @author Songxianyang
 * @date 2022-04-10 17:54
 */
public class Watermelon  extends AbsBeanMilk{
    @Override
    public void dressing() {
        System.out.println("西瓜味");
    }
    
    @Override
    public void putBean() {
        System.out.println("优质大豆");
    }
}

运行结果

image.png