728x90
😀어댑터 패턴이란?
한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환한다.
어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.
즉, 어댑터 패턴은 '돼지코 콘센트'처럼 기존 클래스를 재사용 할 수 있도록
중간에서 맞춰주는 역할을 한다.
Client는 Target인터페이스를 사용하여 메서드를 호출한다.
Adapter에서는 Adaptee 인터페이스를 사용하여 ConcreteMethod 호출로 변경한다. 이때 client는 중간에 Adapter가 존재한다는 것을 인식하지 못한다.
😀코드로 알아봅시다!
110V 헤어드라이기와 220V 에어컨이 있다.
220V에어컨을 틀기 위해 어댑터를 사용 하여 110V에 끼워맞추기
Electronic110V.java
package study.adapterPattern.code0;
public interface Electronic110V {
void powerOn(); //전원을 켜다
}
Electronic220V.java
package study.adapterPattern.code0;
public interface Electronic220V {
void connect(); //전원을 켜다
}
HairDryer.java
package study.adapterPattern.code0;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class HairDryer implements Electronic110V{
@Override
public void powerOn() {
log.info("헤어드라이기 110V on");
}
}
AirConditioner.java
package study.adapterPattern.code0;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class AirConditioner implements Electronic220V{
@Override
public void connect() {
log.info("에어컨 220V on");
}
}
Adapter.java
package study.adapterPattern.code0;
public class Adapter implements Electronic110V{
public Electronic220V electronic220V;
public Adapter(Electronic220V electronic220V){
this.electronic220V = electronic220V;
}
@Override
public void powerOn() {
electronic220V.connect();
}
}
AdapterPatternTest.java
package study.adapterPattern;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import study.adapterPattern.code0.Adapter;
import study.adapterPattern.code0.AirConditioner;
import study.adapterPattern.code0.Electronic110V;
@Slf4j
public class AdapterPatternTest {
@Test
void code0test(){
AirConditioner airConditioner = new AirConditioner();
Electronic110V adapter = new Adapter(airConditioner);
connect(adapter);
}
void connect(Electronic110V electronic110V){
electronic110V.powerOn();
}
}
'DESIGN PATTERN' 카테고리의 다른 글
[디자인패턴] 팩토리 메서드 패턴(Factory Method Pattern) 이란? - 개발자 배찌 (0) | 2022.04.12 |
---|---|
[디자인패턴] 전략패턴 (strategy Pattern)이란? - 개발자 배찌 (0) | 2022.04.12 |
[디자인패턴] 책임 연쇄 패턴 (Chai- of-responsibility Pattern) - 개발자 배찌 (0) | 2022.04.11 |
[디자인패턴] 브릿지패턴(Bridge Pattern) 이란? - 개발자 배찌 (0) | 2022.04.07 |
[디자인패턴] 프록시패턴(proxy Pattern)과 데코레이터패턴(decorator Pattern) - 개발자 배찌 (0) | 2022.04.07 |