> Java > java지도 시간 > 본문

알고리즘 프레임워크 정의 및 Java 템플릿 메소드 패턴의 사용

WBOY
풀어 주다: 2023-05-08 16:46:16
앞으로
1515명이 탐색했습니다.

소개

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("添加奶泡和焦糖酱");
    }
}
로그인 후 복사

Test

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 템플릿 메소드 패턴의 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿