정의:
작업에서 알고리즘을 정의하기위한 프레임 워크로 일부 단계를 서브 클래스로 지연시킵니다. 이를 통해 서브 클래스는 알고리즘의 구조를 변경하지 않고 알고리즘의 특정 특정 단계를 재정의 할 수 있습니다.
매우 높은 엔드, 내 이해 :
1. 부모 클래스는 몇 가지 추상 방법 (기본 방법) 및 몇 가지 특정 방법 (템플릿 메소드)을 선언합니다.
2. 초록 방법은 서브 클래스로 구현되는 알고리즘 (프로세스)의 단계입니다.
3. 템플릿 메소드는 알고리즘 (프로세스) 프레임 워크입니다. 기본 방법에 대한 호출을 구현하고 완전한 고정 논리를 구현하는 것이 학부모 클래스에서 합의되었습니다.
4. 알고리즘 (프로세스)의 구조는 상위 클래스에 정의되며 특정 구현 세부 사항은 서브 클래스에서 구현됩니다.
참고 : 악성 작업을 방지하기 위해 일반 템플릿 방법은 최종과 함께 추가되고 다시 쓰기가 금지됩니다.
일반 클래스 다이어그램 :
실제로 템플릿 방법은 프로그래밍에서 자주 사용되는 패턴입니다. 먼저 예를 살펴 보겠습니다. 어느 날 프로그래머 A는 작업을 받았습니다. 정수 배열을 제공하고 배열의 숫자를 작은 것에서 큰 것으로 정렬 한 다음 정렬 된 결과를 인쇄합니다. 분석 후이 작업은 분류 및 인쇄의 두 부분으로 대략적으로 나눌 수 있습니다. 인쇄 기능은 구현하기 쉽기 때문에 정렬은 약간 번거 롭습니다. 그러나 A는 먼저 인쇄 기능을 완료하고 정렬 기능을 수행 할 다른 사람을 찾습니다.
Abstract Class AbstractSort { / *** 작은에서 큰* @param 배열로 정렬 배열* / Protected Abstract void sort (int [] array); public void showsortresult (int [] array) {this.sort (배열); System.out.print ( "정렬 결과 :"); for (int i = 0; i <array.length; i ++) {system.out.printf ( "%3s", 배열 [i]); }}}글을 쓰고 나서 방금 졸업하고 일을 시작한 동료를 발견했습니다. 그래서 나는 AbstractSort 클래스를 B에 주었고 B가 그것을 구현하기 위해 B를 썼습니다. B는 그것을 인수하여 보았다. 너무 간단했습니다. 10 분 안에 완료되었습니다. 코드는 다음과 같습니다.
Class ConcretEsort 확장 AbstractSort {@override Protected Void Sort (int [] array) {for (int i = 0; i <array.length-1; i ++) {selectSort (Array, i); }} private void selectSort (int [] array, int index) {int minvalue = 32767; // 최소값 변수 int Index = 0; // 최소값 인덱스 변수 int 온도; // (int i = index; i <array.length; i ++) {if (array [i] <minvalue) {// 최소값 minvalue = array [i]; // 최소 값을 저장하는 Indexmin = i; }} temp = 배열 [index]; // 두 개의 숫자 값을 바꾸어 배열 [index] = array [indexmin]; 배열 [indexmin] = temp; }}그것을 작성한 후에, 그것을 a에게 주면, A는 그것을 실행하기 위해 가져갑니다.
공개 클래스 클라이언트 {public static int [] a = {10, 32, 1, 9, 5, 7, 12, 0, 4, 3}; // 사전 설정 데이터 배열 public static void main (String [] args) {AbstractSort s = new Concretesort (); S.Showsortresult (A); }} 실행 결과 :
정렬 결과 : 0 1 3 4 5 7 9 10 12 32
템플릿 방법 패턴의 구조
템플릿 메소드 패턴은 상속 구조를 통한 추상 클래스 및 A (또는 그룹) 구현 클래스로 구성됩니다. 추상 클래스의 방법은 세 가지 유형으로 나뉩니다.
초록 방법 : 부모 클래스는 선언하지만 구현하지는 않지만 사양을 정의한 다음 하위 클래스로 구현합니다.
템플릿 방법 : 추상 클래스별로 선언 및 구현. 일반적으로, 템플릿 메소드는 초록 방법을 호출하여 주요 논리적 함수를 완성하고 템플릿 메소드는 대부분 최종 유형으로 정의되며, 이는 주요 논리적 함수를 서브 클래스로 다시 작성할 수 없음을 나타냅니다.
후크 방법 : 초록 클래스별로 선언 및 구현. 그러나 서브 클래스는 확장 될 수 있으며 서브 클래스는 후크 방법을 확장하여 템플릿 방법의 논리에 영향을 줄 수 있습니다.
추상 클래스의 과제는 추상 클래스의 품질이 프로그램이 안정인지 직접 결정하기 때문에 일반적으로 숙련 된 직원이 작성하는 논리적 프레임 워크를 구축하는 것입니다.
구현 클래스는 세부 사항을 구현하는 데 사용됩니다. 추상 클래스의 템플릿 메소드는 클래스 확장 방법을 구현하여 비즈니스 로직을 완료합니다. 구현 클래스의 확장 방법이 단위 테스트를 통과하는 한, 전체 함수는 일반적으로 템플릿 메소드가 올바른다는 전제에 큰 오류가 없습니다.
템플릿 메소드 모드의 장점 :
1. 변하지 않은 부품을 캡슐화하고 변수 부분을 확장하십시오.
2. 쉽게 유지 보수를 위해 코드의 공개 부분 추출
3. 행동은 부모 수업에 의해 제어되고 아동 계급에 의해 구현됩니다.
템플릿 메소드 모드에 대한 해당 시나리오 :
1. 다중 서브 클래스에는 공개 방법이 있으며 논리는 기본적으로 동일합니다.
2. 복잡한 알고리즘의 경우 핵심 알고리즘은 템플릿 메소드로 설계되었으며 세부 기능은 각 서브 클래스에 의해 구현됩니다.
3. 코드 리팩토링
템플릿 메소드 패턴의 확장
요약 :
상위 클래스는 프레임 워크를 설정합니다. 어린이 수업이 부모 클래스의 일부 메소드를 다시 작성한 후, 부모 클래스에서 상속 된 메소드를 호출하여 다른 결과를 생성합니다.