반응형

구조패턴 - Adaptor

 

해결하려는 문제

  • 인터페이스가 맞지 않을 때 (플러그)
  • 서로 다른 인터페이스를 함께 동작하고자 함

 

 


어댑터 패턴 예제

public class Main {
    public static void main(String[] args) {
    
        MacBook macbook = new MacBook();		// C-type
        iPhone iphone = new iPhone();			// 8-pin
        PortablePan pan = new PortablePan();	// USB
        
        PortableCharger portableCharger = new PortableCharger();	// USB
        portableCharger.charge(pan);
        portableCharger.charge(new CtypeToUsbAdaptor(macbook));
        
        // 8-pin -> USB X
        // 8-pin -> C-type -> USB
        portableCharger.charge(new CtypeToUsbAdaptor(new LightningCableToCtypeAdaptor(iphone)));
    }
}
public class PortableCharger {
    public void charge(UsbCable usbCable) {
        System.out.println("PortableCharger : " + usbCable.getConnectDeviceName() + "USB 충전중...");
    }
}
public interface UsbCable {
    String getConnectDeviceName();
}
public class PortablePan implements UsbCable {
    @Override
    public String getConnectDeviceName() {
        return getClass().getSimpleName();
    }
}
public class MacBook implements CtypeCable {
    @Override
    public String getCtypeConnectDeviceName() {
        return getClass().getSimpleName();
    }
}
public interface CtypeCable {
    String getCtypeConnectDeviceName();
}
public class CtypeToUsbAdaptor implements UsbCable {
    private CtypeCalbe ctypeCable;
    public CtypeToUsbAdaptor(CtypeCable ctypeCable) {
        this.ctypeCable = ctypeCable;
    }
    
    @Override
    public String getConnectDeviceName() {
        return ctypeCable.getCtypeConnectDeviceName();
    }
}
public class iPhone implements LightningCable {
    @Override
    public String getLightningConnectDeviceName() {
        return getClass().getSimpleName();
    }
}
public interface LightningCable {
    String getLightningConnectDeviceCable();
}
public class LightningCableToCtypeAdaptor implements CtypeCable {
    private LightningCalbe lightningCable;
    public LightningCableToCtypeAdaptor(LightningCalbe lightningCable) {
        this.lightningCable = lightningCable;
    }
    
    @Override
    public String getCtypeConnectDeviceName() {
        return LightningCable.getLightningConnectDeviceName();
    }
}

 

 


반응형

+ Recent posts