Back-end/JavaSpringBoot
Adapter pattern
본투비곰손
2022. 8. 1. 23:18
728x90
110v 200v 변환기를 예로 들 수 있다.
호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용할 수 있도록 한다.
개방폐쇄 원칙을 사용한다.
Client |
↓
Interface Target |
Method |
↑
Adapter | → | Adaptee | |
Method | concreteMethod |
110V 인터페이스를 생성
package com.company.design.adapter;
public interface Electronic110V {
void powerOn();
}
220V 인터페이스를 생성
package com.company.design.adapter;
public interface Electronic220V {
void connect();
}
110V를 사용하는 객체 HairDryer
package com.company.design.adapter;
public class HairDryer implements Electronic110V{
@Override
public void powerOn(){
System.out.println("헤어드라이기 110V on");
}
}
220V를사용하는 객체 Airconditioner
package com.company.design.adapter;
public class Airconditioner implements Electronic220V{
@Override
public void connect() {
System.out.println("에어컨 220V on");
}
}
110V 만 연결되는 상황으로 각각 연결 해보면 Airconditioner의 경우 오류가 발생 한다.
package com.company.design;
import com.company.design.adapter.*;
public class main {
public static void main(String[] args) {
HairDryer hairDryer = new HairDryer();
connect(hairDryer);
Airconditioner airconditioner = new Airconditioner();
connect(airconditioner); // 연결하게 되면 오류 발생 220V를 상속 받았기때문
}
// 콘센트
public static void connect(Electronic110V electronic110V){ // main이 static 이기 때문에 static이어야 한다.
electronic110V.powerOn();
} // 현재 집에는 110V 만을 사용해서 전원을 연결하고 있다.
}
변환해줄 수 있는 adapter을 만들어준다.
package com.company.design.adapter;
public class SocketAdapter implements Electronic110V{ // 110V를 상속하고
private Electronic220V electronic220V; // 220V를 스스로 가지는 adapter객체를 생성한다.
public SocketAdapter(Electronic220V electronic220V){
this.electronic220V = electronic220V; // 220V로 연결하게 생성해준다.
}
@Override
public void powerOn() {
electronic220V.connect();
// adapter를 통해 110V 로 연결하게 되면 220V으로 변환되게 재정의 해준다.
}
}
다시 main으로 돌아와서
package com.company.design;
import com.company.design.adapter.*;
public class main {
public static void main(String[] args) {
HairDryer hairDryer = new HairDryer();
connect(hairDryer);
Airconditioner airconditioner = new Airconditioner();
Electronic110V airadapter = new SocketAdapter(airconditioner);
connect(airadapter); // SocketAdapter를 사용하여 110V를
//220V로 변환 연결하는 airadapter를 만들고 airadapterf를 통해서 연결한다.
}
// 콘센트
public static void connect(Electronic110V electronic110V){ // main이 static 이기 때문에 static이어야 한다.
electronic110V.powerOn();
} // 현재 집에는 110V 만을 사용해서 전원을 연결하고 있다.
}
정상적으로 연결되었다는 메세지가 출력 된다.
728x90