Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- nodejs
- 주짓수
- 영화
- Node
- 자바스크립트
- 파이썬
- 영화감상
- 드릴
- 노드
- 영화리뷰
- 개발
- 클로즈가드
- Express
- 리액트
- web
- REACT
- graphQL
- 프로그래밍
- 솔로드릴
- 엄티로드
- git
- 하프가드
- 주짓떼라
- 디자인패턴
- 개발자
- Redux
- 주짓떼로
- JavaScript
- 웹개발
- development
Archives
- Today
- Total
As i wish
[Design pattern] Adapter pattern (어댑터패턴) 본문
오늘은 어댑터 패턴에 대하여 포스팅 해보겠습니다.
어댑터 패턴 이란...
클래스의 인터페시으를 클라이언트에서 요구하는 다른 인터페이스로 변환합니다. 인터페이스가 호환되지 않아 쓸 수 없었던 클래스들을 같이 사용할 수 있게 해줍니다.
클라이언트는 타겟 인터페이스에 맞게 구현되어 있습니다.
어댑터는 타겟 인터페이스를 구현하며, 여기에는 어댑티 인스턴스가 들어있습니다.
즉, 클라이언트에서 타겟 인터페이스를 사용하여 메소드를 호출함으로써 어댑터에 요청을 합니다.
그럼 어댑터에서는 어댑티 인터페이스를 사용하여 그 요청을 어댑티에 대한 매소드 호출로 변환하죠.
마지막으로 클라이언트에서는 호출 결과를 받긴 하지만 중간에 어댑터가 껴 있는지는 알지 못하죠.
역시 코드로 설명하면 아주 가뿐합니다!!
# -*- coding: utf-8 -*-
# Adapter Pattern
import abc
class Duck:
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def quack(self):
pass
@abc.abstractmethod
def fly(self):
pass
class MallardDuck(Duck):
def quack(self):
print ("Quack")
def fly(self):
print ("I'm flying")
class Turkey:
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def gobble(self):
pass
@abc.abstractmethod
def fly(self):
pass
class WildTurkey(Turkey):
def gobble(self):
print ("Gobble gobble")
def fly(self):
print ("I'm flying a short distance")
class TurkeyAdapter(Duck):
def __init__(self, adaptee):
self.turkey = adaptee
def quack(self):
self.turkey.gobble()
def fly(self):
self.turkey.fly()
self.turkey.fly()
self.turkey.fly()
def testDuck(duck):
duck.quack()
duck.fly()
duck = MallardDuck()
turkey = WildTurkey()
turkeyAdapter = TurkeyAdapter(turkey)
print ("The turkey says...")
turkey.gobble()
turkey.fly()
print("The duck says...")
testDuck(duck)
print("The duck says...")
testDuck(turkeyAdapter)
클라이언트에 타겟 인터페이스는 아마 testDuck 에 duck 인터페이스고,
어댑터는 TurkeyAdapter 가 되겠고
어댑티는 Turkey 가 될 수 있겠죠?
이렇게 함으로서 클라이언트와 구현된 인터페이스를 분리시킬 수 있으며, 나중에 인터페이스가 바뀌더라도 그 변경 내역은 어댑터에 캡슐화 되기 때문에 클라이언트는 바뀔 필요가 없겠죠
'Design Pattern' 카테고리의 다른 글
[Design pattern] 데코레이터 vs 어댑터 vs 퍼사드 패턴 (0) | 2019.04.22 |
---|---|
[Design pattern] Facade pattern (퍼사드패턴) (0) | 2019.04.22 |
[Design pattern] Command pattern (커멘드패턴) (0) | 2019.03.31 |
[Design pattern] Singleton pattern (싱글톤 패턴) (0) | 2019.03.10 |
[Design pattern] Abstact Factory pattern (추상 팩토리 패턴) (0) | 2019.02.17 |
Comments