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