프로그래밍/자바 디자인패턴

디자인 패턴 Template Method 패턴

가카리 2012. 8. 3. 19:33
반응형

Template Method패턴

 

상위클래스에서 어떤 처리의 뼈대를 결정하고 하위 클래스에서 그 구체적인 내용을 결정하는 디자인 패턴입니다.

어렵지않은 패턴이라서 아래 코드들을 분석해보면 쉽게 이해하실수 있을겁니다.

 

 

 

public abstract class AbstractDisplay {

 

       //추상메소드 3

       public abstract void open();

       public abstract void print();

       public abstract void close();

      

       //추상메소드를 이용해서 메소드를 구현해둠

       //추상메소드는 자식 클래스에서 구체화 예정

       public final void display(){

             open();

             for(int i=0; i < 5; i++){

                    print();

             }

             close();

       }

      

}

 

 

 

public class CharDisplay extends AbstractDisplay{

 

      

       //하위클래스에서 내용들을 구체화함

       //>>문자<< 이렇게 출력하고싶음

       private char ch;

      

       public CharDisplay(char ch){

             this.ch = ch;

       }

      

       //@Override

       public void close() {

             // TODO Auto-generated method stub

            

             System.out.println("<<");

       }

 

       //@Override

       public void open() {

             // TODO Auto-generated method stub

            

             System.out.print(">>");

       }

 

       //@Override

       public void print() {

             // TODO Auto-generated method stub

            

             System.out.print(ch);

       }

 

}

 

 

 

public class StringDisplay extends AbstractDisplay{

 

      

       //여기서도 추상메소드를 구현함

       private String string;

       private int width;

      

       public StringDisplay(String string){

             this.string = string;

             this.width = string.getBytes().length;//바이트단위의 길이도 기억해둠

//           this.width = string.length(); //이렇게 되면 한글은 2바이트인데 1바이트 인식해서 결과가 이상하게나옴

       }

      

       //@Override

       public void close() {

             // TODO Auto-generated method stub

            

             printLine();

       }

 

       //@Override

       public void open() {

             // TODO Auto-generated method stub

            

             printLine();

       }

 

       //@Override

       public void print() {

             // TODO Auto-generated method stub

             System.out.println("|"+ string + "|");

       }

 

       //+--------+ 이런 효과를 주는 메소드

       private void printLine(){

            

             System.out.print("+");

             for(int i = 0; i < width; i++){

                   

                    System.out.print("-");

             }

             System.out.println("+");

            

       }

}

 

 

 

 

메인 클래스

public class Main {

 

       /**

        * @param args

        */

       public static void main(String[] args) {

             // TODO Auto-generated method stub

             AbstractDisplay d1 = new CharDisplay('H');

             AbstractDisplay d2 = new StringDisplay("Hello, world");

            

             AbstractDisplay d3 = new StringDisplay("안녕하세요.");

            

             d1.display();

             d2.display();

             d3.display();

       }

 

}

 

 

 

 

반응형