반응형
어댑터 패턴(Adapter Pattern)
우리가 기대하는 인터페이스와 다른 인터페이스를 제공하는 모듈이 있을 때 그중 누군가는 모듈을 맞추어야 한다.
하지만 어떤 모듈도 그럴 수 없을 때 어댑터는 클라이언트가 요청하는 타겟 인터페이스(Client Interface)를 만족하게 하고 호환되지 않는 다른 인터페이스를 불러 서로 영향을 받지 않고 사용 할 수 있도록 하는 패던이다.
즉, 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환해주는 역할을 한다.
이때 어댑터를 이용하면 인터페이스 호환성 때문에 같이 쓸 수 없는 클래스들을 연결하여 쓸 수 있다.
타겟 인터페이스 : 클라이언트가 요구하는 인터페이스를 의미한다.
어댑터 패턴 클래스 다이어그램
어댑터 패턴 예제
Volt 클래스
전압값 및 get, set이 가능하다.
package AdapterPattern;
public class Volt {
private int volt;
public Volt(int voltage) {
this.volt = voltage;
}
public int getVoltage() {
return this.volt;
}
public void setVoltage(int voltage) {
volt = voltage;
}
}
Plug 인터페이스
플러그(돼지코)의 전압을 설정하고 connect라는 메서드를 통해 콘센트와 연결한다.
package AdapterPattern;
public interface Plug {
final Volt volt = new Volt(110);
public void connect(Consent consent);
}
Consent 클래스
콘센트를 정의한다.
콘센트 전압을 생성자로 만들어주고 get을 통해 전압을 알 수 있게 해준다.
package AdapterPattern;
public class Consent {
private Volt volt;
public Consent(int voltage){
volt = new Volt(voltage);
}
public int getVoltage() {
return volt.getVoltage();
}
public void work() {
System.out.println("플러그와 콘센트 연결되어 전자기기 동작");
}
}
Adapter 클래스
플러그와 콘센트 전압을 맞추고 consent.work()를 통해 Specific Request()를 실행시킨다.
package AdapterPattern;
public class Adapter implements Plug {
@Override
public void connect(Consent consent) {
if(consent.getVoltage() == Plug.volt.getVoltage()) {
System.out.println("볼트가 같아 어댑터가 따로 동작하지 않습니다.");
}
else {
System.out.println("전압이 달라 어댑터가 플러그의 전압을 " + Plug.volt.getVoltage() + "에서 " + consent.getVoltage() + "로 변환합니다.");
Plug.volt.setVoltage(consent.getVoltage());
System.out.println("플러그의 전압을 " + Plug.volt.getVoltage() + "로 어댑터가 변환시켰습니다.");
}
consent.work();
}
}
AdapterMain 클래스
플러그, 콘센트를 만들고 플러그를 콘센트에 connect한다.
package AdapterPattern;
public class AdapterMain {
public static void main(String[] args) {
Plug plug = new Adapter();
Consent consent = new Consent(220);
plug.connect(consent);
}
}
반응형
'Applied > Design Pattern' 카테고리의 다른 글
상태 패턴(State Pattern) (0) | 2019.07.18 |
---|---|
브릿지 패턴(Bridge Pattern) (0) | 2019.07.15 |
팩토리 패턴(Factory Pattern) (0) | 2019.07.09 |
중재자 패턴(Mediator Pattern) (0) | 2019.07.07 |
반복자 패턴(Iterator Pattern, Cursor) (0) | 2019.07.06 |