디자인 모델 의 - 템 플 릿 방법 모델

3868 단어
머리말
최근 에 < > 잠 금 에 관 한 장 을 공부 할 때 AQS 가 템 플 릿 을 사용 하 는 방법 디자인 모델 에 대해 이 야 기 했 습 니 다. AQS 의 디자인 을 이해 할 수 있 도록 템 플 릿 방법 디자인 모델, Let 's Go!
2. 템 플 릿 방법 모델 이 무엇 입 니까?
정의: 부모 클래스 에서 처리 프로 세 스 의 프레임 워 크 를 정의 하고 하위 클래스 에서 구체 적 인 처 리 를 실현 하 는 모델 은 Template Method 모델 입 니 다.
템 플 릿 을 구성 하 는 방법 은 추상 적 인 방법 이 고 부모 클래스 에 정의 된다.따라서 부모 코드 만 보면 이런 방법 들 이 최종 적 으로 어떤 구체 적 인 처 리 를 할 지 알 수 없 으 며, 유일 하 게 아 는 것 은 부모 코드 가 어떻게 이런 방법 을 호출 하 는 지 하 는 것 이다.하위 클래스 에서 추상 적 인 방법 을 실현 하면 구체 적 인 처 리 를 결정 한다.
3. 예시 코드
기능: 문자 나 문자열 을 다섯 번 반복 합 니 다.
3.1 추상 류 AbstractDisplay
public abstract class AbstractDisplay { //    AbstractDisplay
    public abstract void open();        //             (1) open
    public abstract void print();       //             (2) print
    public abstract void close();       //             (3) close
    public final void display() {       //         display  
        open();                         //     …
        for (int i = 0; i < 5; i++) {   //     5 print
            print();                    
        }
        close();                        // …    。   display        
    }
}

3.2 문자 표시 클래스 CharDisplay추상 클래스 AbstractDisplay 계승.
public class CharDisplay extends AbstractDisplay { // CharDisplay AbstractDisplay   
    private char ch; //        

    public CharDisplay(char ch) { //            
        this.ch = ch; //       
    }

    public void open() { //          ,       
        System.out.print("<>"); //       ">>"
    }
}


3.3 문자열 표시 클래스 StringDisplay추상 클래스 AbstractDisplay 계승.
public class StringDisplay extends AbstractDisplay {    // StringDisplay  AbstractDisplay    
    private String string;                              //         
    private int width;                                  //                
    public StringDisplay(String string) {               //             
        this.string = string;                           //       
        this.width = string.getBytes().length;          //                   ,       
    }
    public void open() {                                //    open  
        printLine();                                    //      printLine    
    }
    public void print() {                               // print  
        System.out.println("|" + string + "|");         //                  "|"      
    }
    public void close() {                               // close  
        printLine();                                    //  open    ,  printLine    
    }
    private void printLine() {                          //  open close    。      private,            
        System.out.print("+");                          //          "+"
        for (int i = 0; i < width; i++) {               //   width "-"
            System.out.print("-");                      //        
        }
        System.out.println("+");                        // /         "+"
    }
}

3.4 Main
테스트 에 사용 할 주 클래스, 프로그램의 입구
public class Main {
    public static void main(String[] args) {
        AbstractDisplay d1 = new CharDisplay('H'); //       'H' CharDisplay    
        AbstractDisplay d2 = new StringDisplay("Hello, world."); //       "Hello, world." StringDisplay    
        AbstractDisplay d3 = new StringDisplay("  ,  。"); //       "  ,  。" StringDisplay    
        d1.display(); //   d1、d2 d3  AbstractDisplay    
        d2.display(); //        display  
        d3.display(); //           CharDisplay  StringDisplay      
    }
}

총화
템 플 릿 방법 모드 는 부모 클래스 의 템 플 릿 방법 에서 처리 프로 세 스 나 알고리즘 을 작 성 했 습 니 다.그 중의 구체 적 인 조작 은 하위 클래스 에서 이 루어 진다.

좋은 웹페이지 즐겨찾기