>Java >java지도 시간 >Java 디자인 패턴: 템플릿 메소드 패턴 예제 분석

Java 디자인 패턴: 템플릿 메소드 패턴 예제 분석

WBOY
WBOY앞으로
2023-04-23 16:07:071041검색

템플릿 메소드 패턴

템플릿 메소드 패턴(템플릿 메소드)은 작업의 알고리즘 뼈대를 정의하고 알고리즘의 일부 단계를 하위 클래스로 지연시켜 하위 클래스가 알고리즘 구조를 재정의할 수 없도록 합니다. 알고리즘. Template Method)定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。

模板方法模式包含以下主要角色:

  • 抽象类(Abstract Class):负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。

    • 抽象方法(Abstract Method) :一个抽象方法由抽象类声明、由其具 体子类实现。

    • 具体方法(Concrete Method) :一个具体方法由一个抽象类或具体类声明并实现,其子类可以进行覆盖也可以直接继承。

    • 钩子方法(Hook Method) :在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。一般钩子方法是用于判断的逻辑方法,这类方法名一般为isXxx,返回值类型为boolean类型。

    • 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。

    • 基本方法:是实现算法各个步骤的方法。基本方法又可以分为三种:

  • 具体子类(Concrete Class

  • 템플릿 메소드 패턴에는 다음과 같은 주요 역할이 포함됩니다.

  • Abstract 클래스(Abstract Class): 개요 제공을 담당합니다. 알고리즘과 뼈대. 템플릿 방식과 여러 가지 기본 방식으로 구성됩니다.
    • 추상 메서드(추상 메서드): 추상 메서드는 추상 클래스에 의해 선언되고 구체적인 하위 클래스에 의해 구현됩니다.

    • Java 디자인 패턴: 템플릿 메소드 패턴 예제 분석구체적 메서드(구체적 메서드): 구체적 메서드는 추상 클래스 또는 구체적 클래스에 의해 선언 및 구현되며 해당 하위 클래스는 직접 재정의하거나 상속할 수 있습니다.

    • Hook 메서드(Hook Method): 판단을 위한 논리적 메서드와 하위 클래스에서 다시 작성해야 하는 빈 메서드를 포함하여 추상 클래스에 구현되었습니다. 일반적으로 Hook 메소드는 판단을 위해 사용되는 논리적 메소드입니다. 이 유형의 메소드 이름은 일반적으로 isXxx이고 반환 값 유형은 boolean입니다.
    • 템플릿 메소드: 알고리즘의 골격을 정의하고 특정 순서로 기본 메소드를 호출합니다.


    • 기본 방법: 알고리즘의 각 단계를 구현하는 방법입니다. 기본 메소드는 세 가지 유형으로 나눌 수 있습니다.



    • 구체 하위 클래스(구체 클래스): 최상위 로직인 추상 클래스에 정의된 추상 메소드와 후크 메소드를 구현합니다. 단계.




      【케이스】
    • 볶는 단계는 정해져 있으며 기름 붓기, 기름 데우기, 야채 붓기, 양념 붓기, 볶기 등의 단계로 나누어져 있습니다. 하지만 다양한 야채와 소스를 넣을 수 있습니다. 이제 템플릿 메소드 모드를 사용하여 코드로 시뮬레이션

      public class TemplateTest {
          public static void main(String[] args) {
              //炒包菜
              BaoCai baoCai = new BaoCai();
              baoCai.cookProcess();
              System.out.println("-------------");
              //炒白菜
              BaiCai baiCai = new BaiCai();
              baiCai.cookProcess();
          }
      }
      abstract class AbstractClass{ //抽象类
          //模板方法定义
          public final void cookProcess() {
              this.pourOil();//倒油
              this.heatOil();//热油
              this.pourVegetable();//倒蔬菜
              this.pourSauce();//倒调味料
              this.fry();//翻炒
          }
          public abstract void pourVegetable();//倒蔬菜是不一样的(一个下包菜,一个是下白菜)
          public abstract void pourSauce();//倒调味料是不一样
          public void pourOil() {System.out.println("倒油");}
          public void heatOil() {System.out.println("热油");}
          public void fry(){System.out.println("炒啊炒");}
      }
      class BaoCai extends AbstractClass{
          public void pourVegetable() {System.out.println("加入包菜");}
          public void pourSauce() {System.out.println("加入辣椒酱");}
      }
      class BaiCai extends AbstractClass{
          public void pourVegetable() {System.out.println("加入白菜");}
          public void pourSauce() {System.out.println("加入盐和味精");}
      }

      [실행 결과]

      기름을 붓고

      기름을 뜨겁게

      양배추를 넣고

      칠리소스를 넣고

      볶고 볶아주세요 ------ ------기름을 붓는다

      기름을 뜨겁게 달군다

      양배추를 넣는다

      소금, MSG를 넣고

      소금 넣고 볶는다

      종료코드 0으로 공정완료

      🎜장점 그리고 템플릿 메소드 패턴의 단점🎜🎜🎜장점:🎜 🎜🎜1. 코드 재사용성을 높이고, 코드의 동일한 부분을 추상 상위 클래스에 넣고, 다른 하위 클래스에 다른 코드를 넣습니다. 🎜🎜2. 역방향 제어가 실현됩니다. 상위 클래스는 하위 클래스의 작업을 호출하고 하위 클래스의 특정 구현을 통해 다양한 동작이 확장되며 "열기 및 닫기 원칙"을 따릅니다. 🎜🎜🎜단점: 🎜🎜🎜1. 각각의 서로 다른 구현에서는 하위 클래스를 정의해야 하며, 이로 인해 클래스 수가 늘어나고 시스템이 커지고 추상적인 디자인이 늘어납니다. 🎜🎜2. 상위 클래스의 추상 메소드는 하위 클래스에 의해 구현되며, 하위 클래스의 실행 결과는 상위 클래스의 결과에 영향을 미치며, 이는 역방향 제어 구조로 이어져 코드 읽기의 어려움을 증가시킵니다. 🎜🎜사용 시나리오🎜🎜1. 알고리즘의 전체 단계는 매우 고정되어 있지만 개별 부분이 가변적인 경우 템플릿 메서드 패턴을 사용하여 하위 클래스로 구현하기 위해 쉽게 가변 부분을 추상화할 수 있습니다. 🎜🎜2. 하위 클래스에 의한 상위 클래스의 역 제어를 실현하려면 상위 클래스 알고리즘의 특정 단계가 실행되는지 여부를 결정하기 위해 하위 클래스를 사용해야 합니다. 🎜

위 내용은 Java 디자인 패턴: 템플릿 메소드 패턴 예제 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제