Design Pattern 2009. 5. 6. 12:25


예를 들어 직류 12볼트로 작동하는 노트북을 교류100볼트의 AC전원에 연결한다고 가정하자.
이때 우리는 AC어댑터라는 장치를 사용한다. AC어댑터는 교류100볼트를 직류12볼트로 교환해 준다.

교류100볼트------AC어댑터--------직류12볼트

상속을 사용한 Adapter패턴



제공되고 있는 것 / 교류 100볼트 / Banner클래스
교환장치 / 어댑터 / PrintBanner 클래스
필요한 것 / 직류 12볼트 / Print인터페이스


//Print 클래스
public interface Print {

    public abstract void printWeak();
    public abstract void printStrong();
}

//PrintBanner클래스
public class PrintBanner extends Banner implements Print {
    public PrintBanner(String string) {
        super(string); //super는 Banner클래스의 생성자를 가리킴
    }
    public void printWeak() {
        showWithParen();
    }
    public void printStrong() {
        showWithAster();
    }
}

//Banner클래스
public class Banner {
    private String string;
    public Banner(String string) {
        this.string = string;
    }
    public void showWithParen() {
        System.out.println("(" + string + ")");
    }
    public void showWithAster() {
        System.out.println("*" + string + "*");
    }
}

//Main클래스
public class Main {
    public static void main(String[] args) {
        Print p = new PrintBanner("Hello");
        p.printWeak();
        p.printStrong();
    }
}

PrintBanner클래스가 어댑터의 역할을 완수한다. 준비된 Banner클래스를 확장해서 showWithParen메소드와 showWithAster메소드를 상속한다. 또한, 필요한 Print인터페이스를 구현해서 printWeak메소드와 printStrong 메소드를 구현한다.
메인클래스는 PrintBanner클래스가 어떻게 실현되고 있는지 모른다. 실행되는지 모른다는 것은 메인 클래스를 전혀 변경하지 않고 PrintBanner클래스의 구현을 바꿀 수 있다는 것..
posted by 나는너의힘
: