우리는 Tailored Adapter안에서 메세지를 해석을 위하여 해당 전용 메소드를 만들수 있다. 왜냐하면 디자인 시간에 Adapter와 Adaptee의 프로토콜을 알고 있기 때문이다. The Adapter class는 유일한 상황의 해석을 위해서 만들어 진다. 그리고 각각의 Adapter의 메소드는 Adaptee에 대한 알맞은 메세지들에 대하여 hard-codes(전용 함수 정도의 의미로 생각) 이다
Adapter시나리오의 두번째는 Adaptee의 인터페이를 디자인 시간에 알수 없을 때 이다. Adaptee의 인터페이스를 먼저 알수 없기 때문에 우리는 하나의 인터페이스에서 다른 것으로 메세지를 간단히 해석할수 없다. 이런 경우에는 메세지의 변형과 전달의 일반적 규칙에 맞추어 Pluggable Adapter를 사용한다. Tailored Adapter와 같이 Pluggable Adapter도 해석기를 Client와 Adaptee사이의 해석기를 제공한다. 하지만 각각의 특별한 경우를 위한 새로운 Adapter클래스의 정의를 필요하지 않다. Pluggable Adapter가 쓰이는 경우의 상태를 생각해보자
상호 작용(사용자가 직접 이용하는의미)하는 어플리케이션을 위한 Model-View-Controller(MVC) 패러다임에서 View 객체들(화면상에 표현을 담당하는 widget들) 은 밑바탕에 깔려있는 어플리케이션 모델과 연결되어진다. 그래서 모델안에서의 변화는 유저 인터페이스에 반영하고 인터페이스 상에서 사용자들에 의한 변화는 밑에 위치한 되어지는 모델 데이터(moel data)에 변화를 유도한다.View객제들이 제공되어 있는 상태라서 어떠한 상호 작용하는 어플리케이션 상에서라도 그들은 ㅡ걸 사용할수 있다. 그러므로 그들은 그들의 모델과의 통신을 위해 일반적인 프로코콜을 사용한다;특별한 상황에서 모델로 보내어지는 getter message는 값이고 일반적인 setter message역시 값이다.:예를 들자면 다음 예제는
VisualWorks TextEditorView가 그것의 contects를 얻는 방법이다.
~cpp
TextEditorView>>getContents
| t |
t := model valud
^t == nil
ifTrue: [Text new]
isFalse: [t]
p108
반면에 어플리케이션 모델 오프젝트들은 일반적으로 다양한 모습을 하나의 값에 보다는 가지고 있다. 그것들이 하나의 모습으로 표현되지만, 모델 객체들은 value와 value:에 보다 분야에 알맞는 accessor message를 좀더 많은 의미를 지닌 이름으로 쓰인다. (
DeleteMe 수정 필요). 그런데 문제점는 우리가 어떻게 뷰나 뷰의 모델에서 뷰가 모델이 이해할수 없는 메세지를 보내면 잡아내느냐 하는거다. 해결책은 우리는 Pluggable Adapter, 값을 메세지로 변환 시키는 것이라고 제시 할수 있다.-저것(Pluggable Adapter)은 메세지를 값 메세지(value message)를 받을때 그것의 Adaptee로 보내는 것이다. 우리는 value: 상에서도 같은걸 해할수 있다.
자 그럼 여기에 예제를 보자. 우리는 employee관리 application을 가지고 있다고 가정한다.어플리케이션 모델은 하나의 인자인, employee의 사회 보장(비밀) 번호(social security number)의 포함하고 application의 사용자 인터페이스는 employee의 사회 보장 번호를 화면상에 뿌려주는 '입력 박스 뷰'를 포함한다.모델의 엑세스하고 초기화 시키기 위한 메소드는 'socialSecurity'와 'socialSecurity:'로 이름 지어져 있다. 입력 박스는 단지 현재의 사회 보장 번호를 뿌리기만 한지만 모델의 값을 요청하는 방법만을 알고있다.(
DeleteMe 수정 필요 ) 그래서 우리는 value mesage를 socialSecurity로 변환 해야 한다.우리는 Pluggable Adapter 객체를 이런 목적을 위해서 사용할수 있다.자 우리의 예제를 위한 interaction 다이어 그램을 보자
그림
이 다이어 그램은 단순화 시킨것이다.;그것은 개념적으로 Pluggable Adpter의 수행 방식을 묘사한다.그러나, Adaptee에게 보내지는 메세지는 상징적으로 표현되는 메세지든, 우회해서 가는 메세지든 이런것들을 허가하는 perform:을 이용하여 실제로 사용된다.|Pluggable Adpater는 Symbol로서 메세지 수집자를 가질수 있고, 그것의 Adaptee에서 만약 그것이 평범한 메세지라면 수집자인 perform에게 어떠한 시간에도 이야기 할수 있다.|예를 들어서 selector 가 Symbol #socialSecurity를 참조할때 전달되는 메세지인 'anObject socialSecurity'는 'anObject perform: selector' 과 동일하다. |이것은 Pluggable Adapter나 Message-Based Pluggable Adapter에서 메세지-전달(message-forwading) 구현되는 키이다.| Adapter의 client는 Pluggable Adapter에게 메세지 수집자의 value와 value: 간에 통신을 하는걸 알린다,그리고 Adapter는 이런 내부적 수집자를 보관한다.|우리의 예제에서 이것은 client가 'Symbol #socialSecurity와 value 그리고 '#socialSecurity:'와 'value:' 이렇게 관계 지어진 Adapter와 이야기 한는걸 의미한다.|양쪽중 아무 메세지나 도착할때 Adapter는 관련있는 메세지 선택자를 그것의 'perform:'.을 사용하는 중인 Adaptee 에게 보낸다.|우리는 Sample Code부분에서 그것의 정확한 수행 방법을 볼것이다.