티스토리 뷰
728x90
반응형
어댑터 패턴
- 어댑터 패턴은 이름에서 알 수 있는거처럼 어댑터처럼 사용되는 패턴입니다. 예를들어 마치 안드로이드 충전기에 아이폰 젠더를 사용하여 아이폰 휴대폰을 충전할 수 있도록 해주는 것입니다. 이처럼 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 동작할 수 있도록 해주는 패턴입니다.
클래스 다이어 그램
Client
- 써드파티 라이브러리나 외부 시스템을 사용할려는 쪽입니다.
Target Interface
- Adapter가 구현하는 인터페이스입니다. 클라이언트는 Target Interface를 통해 Adaptee에 접근하게 됩니다. Target Interface를 통해 어댑터에게 요청을 보냅니다.
Adapter
- Client와 Adaptee 사이에서 호환성이 없는 둘을 연결시켜주는 역할을 담당하게 됩니다. Target Interface를 구현한 클래스이며, 클라이언트는 Adapter는 클라이언트의 요청을 Adaptee가 이해할 수 있는 방법으로 전달하고 처리는 Adaptee에서 이루어집니다.
Adaptee
- 써드파티 라이브러리나 외부 시스템을 의미합니다.
호출 과정
예제 구조
Target Interface 역할을 하는 인터페이스
// 애플 제품
public interface AppleProduct {
void charging(String name); // 충전
void playNumbers(String name); // 넘버스 실행
void playKeynote(String name); // 키노트 실행
}
// 삼성 제품
public interface SamsungProduct {
void charging(String name); // 충전
void playExecl(String name); // 엑셀 실행
void playPowerpoint(String name); // 파워포인트 실행
}
Adapter 역할을 하는 클래스
public class SamsungAdapter implements AppleProduct{
private SamsungProduct samsungProduct;
public SamsungAdapter(SamsungProduct samsungProduct) {
this.samsungProduct = samsungProduct;
}
@Override
public void charging(String name) {
samsungProduct.charging(name);
}
@Override
public void playNumbers(String name) {
samsungProduct.playExecl(name);
}
@Override
public void playKeynote(String name) {
samsungProduct.playPowerpoint(name);
}
}
Adaptee 역할을 하는 클래스들
// 애플 제품군에 속하는 Adaptee
public class MackBook implements AppleProduct {
@Override
public void charging(String name) {
System.out.println(name + " 제품을 충전중입니다.");
}
@Override
public void playNumbers(String name) {
System.out.println(name + "파일을 실행시킵니다.");
}
@Override
public void playKeynote(String name) {
System.out.println(name + "파일을 실행시킵니다.");
}
}
public class IPhone implements AppleProduct {
@Override
public void charging(String name) {
System.out.println(name + " 제품을 충전중입니다.");
}
@Override
public void playNumbers(String name) {
System.out.println(name + "파일을 실행시킵니다.");
}
@Override
public void playKeynote(String name) {
System.out.println(name + "파일을 실행시킵니다.");
}
}
// 삼성 제품군에 속하는 Adaptee
public class Galaxy implements SamsungProduct {
@Override
public void charging(String name) {
System.out.println(name + " 제품을 충전중입니다.");
}
@Override
public void playExecl(String name) {
System.out.println(name + "파일을 실행시킵니다.");
}
@Override
public void playPowerpoint(String name) {
System.out.println(name + "파일을 실행시킵니다.");
}
}
Client 클래스
public class Client {
public static void main(String[] args) {
AppleProduct iPhone = new IPhone();
iPhone.charging("아이폰 미니 12");
AppleProduct mackBook = new MackBook();
mackBook.playNumbers("macBook의 Numbers");
mackBook.playKeynote("macBook의 Keynoter");
AppleProduct galaxy = new SamsungAdapter(new Galaxy());
galaxy.charging("갤럭시 노트");
galaxy.playNumbers("galaxy의 Execl");
galaxy.playKeynote("galaxy의 Powerpoint");
}
}
728x90
반응형
'JAVA > Design_Pattern' 카테고리의 다른 글
[Design_Pattern] 데코레이터 패턴 (0) | 2022.03.11 |
---|---|
[Design_Pattern] 컴포지트 패턴 (0) | 2022.03.07 |
[Design_Pattern] 싱글톤패턴 (0) | 2022.03.01 |
[Design_Pattern] 프로토 타입 패턴 (0) | 2022.02.28 |
[Design_Pattern] 빌더 패턴 (0) | 2022.02.21 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- service based architecture
- pipeline architecture
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- transactional outbox pattern
- polling publisher spring boot
- space based architecture
- 서비스 기반 아키텍처
- 트랜잭셔널 아웃박스 패턴 스프링부트
- microkernel architecture
- @ControllerAdvice
- spring boot excel download paging
- JDK Dynamic Proxy와 CGLIB의 차이
- redis sorted set으로 대기열 구현
- pipe and filter architecture
- 레이어드 아키텍처란
- 람다 표현식
- spring boot redis 대기열 구현
- redis sorted set
- java ThreadLocal
- spring boot redisson sorted set
- transactional outbox pattern spring boot
- redis 대기열 구현
- spring boot redisson destributed lock
- spring boot excel download oom
- spring boot 엑셀 다운로드
- spring boot poi excel download
- spring boot redisson 분산락 구현
- 공간 기반 아키텍처
- 자바 백엔드 개발자 추천 도서
- java userThread와 DaemonThread
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함