Adapter (Wrapper)
- 호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 함
- 어댑터: 한 객체의 인터페이스를 다른 객체가 이해할 수 있도록 변환하는 특별한 객체 (두 객체 사이의 래퍼 역할),
하나의 객체에 대한 호출을 캐치하고 두 번째 객체가 인식할 수 있는 형식과 인터페이스로 변환
- 객체 어댑터: 객체 합성 원칙 사용, 어댑터는 한 객체의 인터페이스를 구현하고 다른 객체는 래핑함
- 클래스 어댑터: 상속 사용, 동시에 두 객체의 인터페이스 상속
(다중 상속 지원하는 C++ 같은 언어에서만 사용 가능)
- 어댑터 클래스는 기존 클래스를 사용하고 싶지만 그 인터페이스가 나머지 코드와 호환되지 않을 때 사용
- 예시
/**
* The Target defines the domain-specific interface used by the client code.
*/
class Target {
public request(): string {
return "Target: The default target's behavior.";
}
}
/**
* The Adaptee contains some useful behavior, but its interface is incompatible
* with the existing client code. The Adaptee needs some adaptation before the
* client code can use it.
*/
class Adaptee {
public specificRequest(): string {
return '.eetpadA eht fo roivaheb laicepS';
}
}
/**
* The Adapter makes the Adaptee's interface compatible with the Target's
* interface.
*/
class Adapter extends Target {
private adaptee: Adaptee;
constructor(adaptee: Adaptee) {
super();
this.adaptee = adaptee;
}
public request(): string {
const result = this.adaptee.specificRequest().split('').reverse().join('');
return `Adapter: (TRANSLATED) ${result}`;
}
}
/**
* The client code supports all classes that follow the Target interface.
*/
function clientCode(target: Target) {
console.log(target.request());
}
console.log('Client: I can work just fine with the Target objects:');
const target = new Target();
clientCode(target);
console.log('');
const adaptee = new Adaptee();
console.log(
"Client: The Adaptee class has a weird interface. See, I don't understand it:"
);
console.log(`Adaptee: ${adaptee.specificRequest()}`);
console.log('');
console.log('Client: But I can work with it via the Adapter:');
const adapter = new Adapter(adaptee);
clientCode(adapter);
- 활용
반응형
'Personal-Study > Design Patterns' 카테고리의 다른 글
[TS Design Patterns] 구조 패턴 - 컴포지트 (0) | 2023.10.24 |
---|---|
[TS Design Patterns] 구조 패턴 - 브리지 (0) | 2023.10.23 |
[TS Design Patterns] 생성 패턴 - 싱글톤 (0) | 2023.10.21 |
[TS Design Patterns] 생성 패턴 - 프로토타입 (0) | 2023.10.21 |
[TS Design Patterns] 생성 패턴 - 빌더 (0) | 2023.10.21 |
댓글