Both sides previous revisionPrevious revisionNext revision | Previous revision |
design_pattern:adapter_pattern [2017/10/27 10:19] – [Adapter Pattern] ledyx | design_pattern:adapter_pattern [2024/02/05 13:16] (current) – [Target, Adapter] ledyx |
---|
* '이미 제공된 API'와 '필요한 API' 사이의 '차이'를 없애주는 Design Pattern. | * '이미 제공된 API'와 '필요한 API' 사이의 '차이'를 없애주는 Design Pattern. |
* 기존에 제공된 API를 수정하지 않고 필요한 API에 맞추려는 Design Pattern. | * 기존에 제공된 API를 수정하지 않고 필요한 API에 맞추려는 Design Pattern. |
| * 구 버전과의 호환성 |
* 다른 용도로 감싸기때문에 'Wrapper' Pattern이라고도 불림. | * 다른 용도로 감싸기때문에 'Wrapper' Pattern이라고도 불림. |
| |
{{tag>Architecture Modeling DesignPattern Structional}} | {{tag>Architecture Modeling Design_Pattern Structural}} |
| |
= 상속을 이용한 구현 = | = 상속을 이용한 구현 = |
| == Adaptee == |
| <sxh java> |
| /** |
| * 이미 제공되는 API. 개조될 대상. |
| /* |
| public class OldVerAPI { |
| private String str; |
| |
| public OldVerAPI(String str) { |
| super(); |
| this.str = str; |
| } |
| |
| public void showMessage() { |
| System.out.println(str); |
| } |
| } |
| </sxh> |
| |
| == Target, Adapter == |
| <sxh java> |
| /** |
| * 필요한, 변환될 것. Target |
| */ |
| public interface NewVerAPI { |
| void printMessage(); |
| void printVersion(); |
| } |
| </sxh> |
| |
| <sxh java> |
| /** |
| * 필요한, 변환될 것의 구현체. Adapter |
| */ |
| public class NewVerAPIImpl extends OldVerAPI implements NewVerAPI { |
| |
| public NewVerAPIImpl(String str) { |
| super(str); |
| } |
| |
| @Override |
| public void printMessage() { |
| showMessage(); |
| } |
| |
| @Override |
| public void printVersion() { |
| System.out.println("v1.0"); |
| } |
| } |
| </sxh> |
| |
| == Client == |
| <sxh java> |
| /** |
| * Target 역할의 Method를 이용하여 수행. |
| */ |
| public class Main { |
| public static void main(String[] args) { |
| NewVerAPI p = new NewVerAPIImpl("test"); |
| |
| p.printMessage(); |
| p.printVersion(); |
| } |
| } |
| |
| //test |
| //v1.0 |
| </sxh> |
| |
| |
= 위임을 이용한 구현 = | = 위임을 이용한 구현 = |
| Target이 Class인 경우. Java나 C#은 다중상속이 되지 않기 때문에 **다른 인스턴스의 메소드에 맡김** |
| |
| == Target, Adapter == |
| <sxh java> |
| /** |
| * 필요한, 변환될 것. Target |
| */ |
| public interface NewVerAPI { |
| void printMessage(); |
| void printVersion(); |
| } |
| </sxh> |
| |
| <sxh java ; highlight:[5]> |
| /** |
| * 필요한, 변환될 것의 구현체. Adapter |
| */ |
| public class NewVerAPIImpl implements NewVerAPI { |
| private OldVerAPI oldVerAPI; |
| |
| public NewVerAPIImpl(String str) { |
| this.oldVerAPI = new OldVerAPI(str); |
| } |
| |
| @Override |
| public void printMessage() { |
| oldVerAPI.showMessage(); |
| } |
| |
| @Override |
| public void printVersion() { |
| System.out.println("v1.0"); |
| } |
| } |
| </sxh> |