호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용 가능
SOLID 중 개방 폐쇄 원칙(OCP)
public interface Electronic110V {
void powerOn();
}
public interface Electronic220V {
void connect();
}
// 110V를 가지는 헤어드라이기 제품
public class HairDryer implements Electronic110V {
@Override
public void powerOn() {
System.out.println("헤어 드라이기 110v on");
}
}
public class AirConditioner implements Electronic220V{
@Override
public void connect() {
System.out.println("에어컨 220v on");
}
}
public class Cleaner implements Electronic220V {
@Override
public void connect() {
System.out.println("청소기 220v on");
}
}
호환성이 없는 클래스 끼리 연결
SocketAdapter
// 자기자신(110V)와 연결할 대상(220V)를 연결(Adapter)하여 변환
public class SocketAdapter implements Electronic110V{
private Electronic220V electronic220V;
public SocketAdapter(Electronic220V electronic220V) {
this.electronic220V = electronic220V;
}
@Override
public void powerOn() {
electronic220V.connect();
}
}
public static void connect(Electronic110V electronic110V) {
electronic110V.powerOn();
}
HairDryer hairDryer = new HairDryer();
connect(hairDryer); // 출력 : 헤어 들라이기 110v on
// Adapter 를 통해서, 원래 220v인 Cleaner 를 110v에 연결 가능
Cleaner cleaner = new Cleaner();
Electronic110V adapter = new SocketAdapter(cleaner);
connect(adapter); // 출력 : 청소기 220v on
// Adapter 를 통해서, 원래 220v인 AirConditioner 를 110v에 연결 가능
AirConditioner airConditioner = new AirConditioner();
Electronic110V airAdapter = new SocketAdapter(airConditioner);
connect(airAdapter); // 출력 : 에어컨 220v on