728x90
반응형
Adapter Pattern
호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용할 수 있도록 합니다. OCP를 따릅니다.
Adapter Pattern 예제 (220v -> 110v)
[Electronic110V interface]
package Java.adapterPattern;
public interface Electronic110V {
//전원을 공급한다.
void powerOn();
}
[Electronic220V interface]
package Java.adapterPattern;
public interface Electronic220V {
//전원을 공급한다.
void powerOn();
}
[Macbook class implement 110V]
package Java.adapterPattern;
public class MacBook implements Electronic110V{
@Override
public void powerOn() {
System.out.println("Mac Book 110V On");
}
}
전원 공급을 위해 110V를 사용하도록 110V를 상속한 맥북 클래스를 생성합니다.
[MacbookPro class implement 220V]
package Java.adapterPattern;
public class MacBookPro implements Electronic220V{
@Override
public void powerOn() {
System.out.println("Mac Book Pro 220V On");
}
}
전원 공급을 위해 220V를 사용하도록 220V를 상속한 맥북프로 클래스를 생성합니다.
[SocketAdapter class implement 110V]
package Java.adapterPattern;
public class SocketAdapter implements Electronic110V{
private Electronic220V electronic220V;
public SocketAdapter(Electronic220V electronic220V){
this.electronic220V = electronic220V;
}
@Override
public void powerOn() {
electronic220V.powerOn();
}
}
맥북 프로를 110V콘센트에 연결하기 위해 220V를 호환할 수 있도록 Adapter 클래스를 구현하였습니다.
110V의 전원 콘센트를 연결해야하므로 110V를 상속받습니다. 그리고 220V 전원을 선언하고 사용합니다.
110V 인터페이스에서 오버라이딩한 메서드 powerOn을 호출하면 220V 인터페이스의 PowerOn을 사용하도록 합니다.
[AdapterMain class]
package Java.adapterPattern;
public class AdapterMain {
public static void main(String[] args) {
MacBook macBook = new MacBook();
connect(macBook);
MacBookPro macBookPro = new MacBookPro();
Electronic110V adapter = new SocketAdapter(macBookPro);
connect(adapter);
}
//110V 콘센트 -> 연결을 하면 powerOn 메서드 호출
public static void connect(Electronic110V electronic110V){
electronic110V.powerOn();
}
}
맥북을 어댑터에 연결하여 110V 콘센트에 연결할 수 있도록 합니다. 그리고 adpater 자체를 110V에 연결합니다.
결론
위와 같은 방법으로 220V 전원이 필요한 맥북 프로를
110V 콘센트에 연결할 수 있도록 하는 어댑터 패턴을 구현해보았습니다.
728x90
반응형
'JAVA' 카테고리의 다른 글
[Java] Proxy Pattern - AOP (0) | 2022.07.31 |
---|---|
[Java] Proxy Pattern (0) | 2022.07.31 |
[Java] Thread Method : wait(), notify() (0) | 2022.07.31 |
[Java] Thread Synchronization (0) | 2022.07.29 |
[Java] Thread Method : join() (0) | 2022.07.29 |