반응형
구조패턴 - 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();
}
}
반응형
'cs > java-spring-boot' 카테고리의 다른 글
[Zero-base] 11-7. 데코레이터(Decorator) (0) | 2022.03.15 |
---|---|
[Zero-base] 11-6. 파사드(Facade) (0) | 2022.03.15 |
[Zero-base] 11-4. 팩토리(Factory) (0) | 2022.03.15 |
[Zero-base] 11-3. 빌더(Builder) (0) | 2022.03.15 |
[Zero-base] 11-2. 싱글턴(Singleton) (0) | 2022.03.15 |