728x90
Adapter는 실생활에서는 100v 를 220v로 변경해주거나, 그 반대로 해주는 흔히돼지코 라고 불리는 변환기를 예로 들 수 있다. 호환성이 없는 기존 클래스의 인터페이스를 변환하여재사용 할 수 있도록 한다.
SOLID중에서 개방폐쇠 원칙(OCP)를 따른다.
ex)우리집에있는 가전제품
헤어드라이기 110V
청소기 220V
에어컨 220V
Electronic110V 인터페이스
package Muzi.adapter;
public interface Electronic110V {
void powerOn();
}
Electronic220V인터페이스
package Muzi.adapter;
public interface Electronic220V {
void connect();
}
Airconditioner 클래스(220V)
package Muzi.adapter;
public class Airconditioner implements Electronic220V{
@Override
public void connect() {
System.out.println("에어컨 220V on");
}
}
Cleaner 클래스(220V)
package Muzi.adapter;
public class Cleaner implements Electronic220V{
@Override
public void connect() {
System.out.println("청소기 220V on");
}
}
HairDryer 클래스(110V)
package Muzi.adapter;
public class HairDryer implements Electronic110V{
@Override
public void powerOn() {
System.out.println("헤어 드라이기 110v on");
}
}
ex) 우리집에서 사용 가능한것은 110V가전제품이다.
하지만 HairDry클래스만 110V이고 나머지 전자제품들은 220V이다
그래서 110V사용 가능한건 HairDry인데 나머지 용품들도
우리 집에서 110V로 사용 하고 싶다
그래서 슈퍼에가서 Adapter를 사왔다.
SocketAdapter 클래스
package Muzi.adapter;
public class SocketAdapter implements Electronic110V {
private Electronic220V electronic220V;
public SocketAdapter(Electronic220V electronic220V) {
this.electronic220V = electronic220V;
}
@Override
public void powerOn() {
electronic220V.connect();
}
}
package Muzi.singleton;
import Muzi.adapter.Airconditioner;
import Muzi.adapter.Cleaner;
import Muzi.adapter.Electronic110V;
import Muzi.adapter.HairDryer;
import Muzi.adapter.SocketAdapter;
public class Main {
public static void main(String[] args) {
//헤어 드라이기만 110V라서 사용가능한건 헤어드라이기이다
HairDryer hairDryer = new HairDryer();
connect(hairDryer);
//그래서 다른 기기들도 사용하기 위해 슈퍼에 가서
//new SocketAdapter을 사와 cleaner(청소기)와 연결해주고
//다시 연결을 했더니 가동이 되었다
Cleaner cleaner = new Cleaner();
Electronic110V adapter = new SocketAdapter(cleaner);
connect(adapter);
//그래서 다른 기기들도 사용하기 위해 슈퍼에 가서
//new SocketAdapter을 사와 airconditioner(에어컨)과 연결해주고
//다시 연결을 했더니 가동이 되었다
Airconditioner airconditioner = new Airconditioner();
Electronic110V airAdapter = new SocketAdapter(airconditioner);
connect(airAdapter);
}
//콘센트
public static void connect(Electronic110V electonic110V) {
electonic110V.powerOn();
}
}
이렇게
인터페이스가 달라서 맞춰지지 못할떄 중간에 adapter라는 클래스를 두고
연결시켜 줄 수 있는 형태를 가지는것이 adapter패턴이다.
'Spring > 디자인패턴' 카테고리의 다른 글
ObserverPattern(옵저버 패턴) (0) | 2023.07.24 |
---|---|
Decorator pattern(데코레이터 패턴) (0) | 2023.07.24 |
Proxy pattern(프록시 패턴) (0) | 2023.07.21 |
Singleton pattern(싱글톤 패턴) (0) | 2023.07.19 |
디자인패턴 이란? 무엇인가!! (0) | 2023.07.19 |