登录
首页 >  文章 >  java教程

使用Java模板方法模式定义算法框架步骤

来源:亿速云

时间:2024-03-26 22:06:34 307浏览 收藏

Java 中的模板方法模式是一种行为设计模式,它定义了算法的骨架,允许子类重写某些步骤,同时不改变算法的结构。它遵循开放/关闭原则,即对扩展开放,对修改关闭。模板方法模式包含一个抽象类和具体子类。抽象类定义了算法的框架,包括模板方法和抽象方法。具体子类通过实现抽象方法来自定义某些步骤的行为。模板方法模式还包含钩子函数,这些函数允许子类在算法的特定步骤中进行特定操作或检查条件,或扩展算法。

介绍

Java中的模板方法模式是一种行为设计模式,用于定义算法的框架并允许子类重写某些步骤,同时不改变算法的结构.

该模式基于开放/关闭原则,即对扩展开放,对修改关闭,在模板方法模式中,父类定义了一个算法的骨架,而子类可以通过实现父类的抽象方法,来自定义某些步骤的行为,整个算法步骤不会因为子类的改变而改变

模板方法模式通常包括一个抽象类和若干个具体子类,抽象类中定义了算法的框架,包括一些基本的方法和一个模板方法.模板方法是一个模板,其中包含了算法的步骤,每个步骤都有一个抽象方法或一个默认方法实现,具体的子类可以通过实现这些抽象方法来实现自己的行为.

抽象类中还可以有钩子函数,钩子函数通常是抽象类中的虚函数,其默认实现为空,这样子类可以选择覆盖该函数来实现特定的行为.在模板方法模式中,钩子函数通常用于在算法的某些特定步骤中进行特定的操作或检查条件.钩子函数的另一个用途是提供一种扩展算法的方法,子类可以通过覆盖钩子函数来添加额外的步骤或者修改算法的行为.总之钩子函数是模板方法模式中的一个重要概念,可以用来影响算法的行为或者扩展算法的功能.

实现

首先定义咖啡抽象类

package com.fanqiechaodan.templatemethod;
/**
 * @Classname CoffeeMaker
 * @Description 咖啡抽象类
 */
public abstract class CoffeeMaker {
    public final void makeCoffee() {
        boilWater();
        brewCoffee();
        pourInCup();
        if (isCondiments()) {
            addCondiments();
        }
    }
    private void boilWater() {
        System.out.println("煮水");
    }
    protected abstract void brewCoffee();
    private void pourInCup() {
        System.out.println("倒入杯子中");
    }
    /**
     * 钩子函数;是否加入调料,由子类决定是否重写
     *
     * @return
     */
    protected boolean isCondiments() {
        return true;
    }
    protected abstract void addCondiments();
}

其次定义两个具体子类

public class AmericanoMaker extends CoffeeMaker{
    @Override
    protected void brewCoffee() {
        System.out.println("冲泡美式咖啡");
    }
    @Override
    protected void addCondiments() {
        System.out.println("加入牛奶和糖");
    }
    /**
     * 钩子函数;是否加入调料,由子类决定是否重写
     *
     * @return
     */
    @Override
    protected boolean isCondiments() {
        return false;
    }
}
public class LatteMaker extends CoffeeMaker{
    @Override
    protected void brewCoffee() {
        System.out.println("冲泡浓缩咖啡");
    }
    @Override
    protected void addCondiments() {
        System.out.println("添加奶泡和焦糖酱");
    }
}

测试

package com.fanqiechaodan.templatemethod;
/**
 * @author fanqiechaodan
 * @Classname Demo
 * @Description 模板方法模式
 * @Date 2023/3/9 18:57
 */
public class Demo {
    public static void main(String[] args) {
        CoffeeMaker americanoMaker = new AmericanoMaker();
        americanoMaker.makeCoffee();
        System.out.println();
        CoffeeMaker latteMaker = new LatteMaker();
        latteMaker.makeCoffee();
    }
}

怎么使用Java模板方法模式定义算法框架

今天关于《使用Java模板方法模式定义算法框架步骤》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于java的内容请关注golang学习网公众号!

声明:本文转载于:亿速云 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>