-
[Design Pattern] Adapter PatternLearn/Architecture 2022. 9. 4. 00:00
# 개요
서로 다른 인터페이스를 가진 클래스들이 같이 일할 수 있게 하기 위한 패턴
클라이언트는 자신의 요청이 어떤 adaptee로 가는지 알 필요가 없음
예시
adapter는 클라이언트의 요청이 들어오면 adaptee를 변환하여 처리해준다.
public class TurkeyAdapter implements Duck { // adaptee Turkey turkey; public TurkeyAdapter (Turkey turkey) { this.turkey = turkey; } public void quack () { turkey.gobble (); } public void fly () { for (int i= 0; i < 5; i++) turkey.fly (); } }
아래와 같이 Adapter를 통해 turkey를 마치 duck처럼 쓸 수 있다.
public class DuckTestDrive { public static void main(String[] args) { MallardDuck duck = new MallardDuck(); WildTurkey turkey = new WildTurkey(); // turkey는 duck이 아니므로 adapter 필요 Duck turkeyAdapter = new TurkeyAdapter(turkey); System.out.println("The Turkey says..."); turkey.gobble(); turkey.fly(); System.out.println("\nThe Duck says..."); testDuck(duck); System.out.println("\nThe TurkeyAdapter says..."); // adapter를 통해 turkey는 duck이 아닌데도 testDuck에 줄 수 있다. testDuck(turkeyAdapter); } // testDuck 함수는 duck만 받도록 되어있다. static void testDuck(Duck duck) { duck.quack(); duck.fly(); } }
# 종류
Object Adapter
- adapter 객체는 adaptee의 레퍼런스를 가지며 책임을 위임함 (composition and delegation)
- 위의 예시가 여기에 해당
Class Adapter
- 상속을 통해 adapter를 구현한다. (inheritance)
- target이 꼭 interface일 필요가 없고 일반 클래스가 되어도 된다.
'Learn > Architecture' 카테고리의 다른 글
[Design Pattern] Composite Pattern (0) 2022.09.25 [Design Pattern] Decorator Pattern (0) 2022.09.24 [Design Pattern] Singleton Pattern (0) 2022.08.31 [Design Pattern] Builder Pattern (0) 2022.08.30 [Design Pattern] Factory Method & Abstract Factory Patterns (0) 2022.08.29