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

디자인 패턴 Adapter패턴 상속을 사용한 Adapter패턴

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

Adapter 패턴

 

노트북에 사용하는 어댑터처럼 이미 제공된것(ac220볼트) 과 필요한것 (dc 19v)의 차이를 없애주는 패턴방법

 

1. 클래스에 의한 Adapter 패턴(상속을 사용한 것)

2. 인스턴스에 의한 Adapter패턴(위임을 사용한 것)

 

첫번째 방법을 사용해 봅시다.

 

나오는 클래스를 설명하면

제공되고있는 것(ac220) Banner클래스(showWithParen, showWithAster)

어댑터 PrintBanner 클래스

필요한것(dc 19v) Print인터페이스(printWeak, printStrong)

 

 

 

public class Banner {

       private String string;

      

       Banner(String string){

             this.string = string;

       }

       public void showWithParen(){

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

       }

      

       public void showWithAster(){

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

       }

      

}

 

 

 

public interface Print {

       public abstract void printWeak();

       public abstract void printStrong();

}

 

 

 

 

 

 

 

 

 

public class PrintBanner extends Banner implements Print

{

 

       PrintBanner(String string) {

             super(string);

              // TODO Auto-generated constructor stub

       }

 

       @Override

       public void printStrong() {//인터페이스는 Print 필요한것을 구현햇는데

             // TODO Auto-generated method stub

             showWithParen();//실제 내용을 보니 주어진것인 Banner 썼음

             //결국 PrintBanner 어댑터의 역할만 했음

       }

 

       @Override

       public void printWeak() {

             // TODO Auto-generated method stub

             showWithAster();

       }

      

}

 

 

 

 

 

public class Main {

 

       /**

        * @param args

        */

       public static void main(String[] args) {

             // TODO Auto-generated method stub

                    Print p = new PrintBanner("Hello");

                    p.printWeak();

                    p.printStrong();

       }

 

}

 

 

 

결과

 

 

 

결론적으로 main클래스는 Banner클래스의 존재유무를 모릅니다. 즉 노트북에 디시전류만 공급되면 잘 동작하지 ac220가 어댑터에 의해서 변해진 사실은 모릅니다

main클래스를 전혀 변경하지않고 어댑터인 PrintBanner클래스의 구현을 바꿀 수 있다는 것이 장점입니다.

 

반응형