반응형
Adapter는 실생활에서는 100v 를 220v로 변경하거나 , 그 반대로 해주는 흔히 돼지코 라고 불리는 변환기를 예로 들 수 있다. 호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용 할 수 있도록 한다.
SOLID중 개방폐쇠 원칙(OCP)을 따른다
Adapter pattern을 실생활에서 콘센트 어뎁터를 통해 예시를 들어 보려한다.
에어컨(220v), 청소기(220v) , 헤어드라이어(110v) 3가지 가전 제품이 있고
각각 제품들은 110V와 220V 방식을 구현한다.
220v를 110v로 변환해주는 SocketAdapter가 있으며
우리집엔 110v 콘센트 밖에 없는 상황이다.
코드로는 아래와 같다.
110v와 220v 인터페이스 (인터페이스는 편의상 한군데 적어놨다.)
package com.company.adaptor;
public interface Electronic110V {
void powerOn();
}
package com.company.adaptor;
public interface Electronic220V {
void connect();
}
에어컨 class
public class AirConditioner implements Electronic220V{
@Override
public void connect() {
System.out.println("에어컨 220V on");
}
}
청소기 class
package com.company.adaptor;
public class Cleaner implements Electronic220V{
@Override
public void connect() {
System.out.println("청소기 220v on");
}
}
헤어드라이어 class
package com.company.adaptor;
public class HairDryer implements Electronic110V{
@Override
public void powerOn() {
System.out.println("충전기 110v on");
}
}
adapter class
package com.company.adaptor;
//220v를 110v로 변환해줄 adapter
public class SocketAdapter implements Electronic110V {
private Electronic220V electronic220V;
//220v를 받아서
public SocketAdapter(Electronic220V electronic220V){
this.electronic220V = electronic220V;
}
//110v에서 사용하게 해준다.
@Override
public void powerOn() {
electronic220V.connect();
}
}
위의 SocketAdapter는 Adapter pattern으로 되어있다
기본적으로 110V를 구현하고 , 생성시에 변환시킬 220v 제품을 갖게되어 powerOn메서드에서
110v 로 사용할 수있게한다.
main 클래스
public class Main {
//adapter pattern
//드라이기 110V
HairDryer hairDryer = new HairDryer();
//청소기 220v
Cleaner cleaner = new Cleaner();
//에어컨 220v
AirConditioner airConditioner = new AirConditioner();
connect(hairDryer);
//청소기는 220v를 구현하기 떄문에 연결되지 않는다.
//connect(cleaner);
//어뎁터에 청소기를 연결함
//중간에 자기자신의 상태는 변환시키지 않고 인터페이스 형식을
//맞추는 형식을 adapter pattern 이라 한다.
Electronic110V adapter = new SocketAdapter(cleaner);
//연결이 된다.
connect(adapter);
Electronic110V airAdapter = new SocketAdapter(airConditioner);
connect(airAdapter);
}
//콘센트
public static void connect(Electronic110V electronic110V){
electronic110V.powerOn();
};
}
반응형
'DesignPattern' 카테고리의 다른 글
디자인 패턴 6 - Observer pattern (0) | 2021.05.06 |
---|---|
디자인 패턴 5 - decorator pattern (0) | 2021.05.05 |
디자인 패턴 4 - proxy pattern (0) | 2021.05.05 |
디자인 패턴 2 - Singleton pattern (0) | 2021.05.05 |
디자인 패턴 1 - 디자인 패턴이란? (0) | 2021.05.05 |