05. Adapter Pattern

Jimin Lim·2021년 11월 3일
0

Design Pattern

목록 보기
6/12
post-thumbnail

Adapter Pattern

  • 클래스의 인터페이스를 클라이언트가 원하는 형태의 또 다른 인터페이스로 변환
  • 어댑터는 호환되지 않는 인터페이스때문에 동작하지 않는 클래스들을 함께 동작할 수 있도록 만들어준다.
    Wrapper: int ➡️ Integer

역할

  • 객체를 감싸는 역할을 한다. (Object Wrapping)
  • 서로 호환되지 않는 두 개 인터페이스를 연결하는 작업
  • 서로 다른 인터페이스를 동일하게 변환
  • 예를 들어, 서로 다른 플러그의 경우 어댑터를 사용해서 변환시킬 수 있다.

Problem

  • 사용 객체의 API가 서로 다르다.

Solution

  • 함수를 변환하는 객체를 중간에 넣는다.

→ 변경을 최소화해서 클라이언트를 유지해준다.

예시

Duck
public interface Duck {
    public void quack();
    public void fly();
}

class MallardDuck implements Duck{
    public void quack(){
        System.out.println("Quack");
    }

    public void fly(){
        System.out.println("I'm flying");
    }
}
Turkey
public interface Turkey {
    public void gobble();
    public void fly();
}

class WildTurkey implements Turkey{
    @Override
    public void gobble() {
        System.out.println("Gobble gobble");
    }

    @Override
    public void fly() {
        System.out.println("I'm flying a short distance");
    }
}
Turkey Adapter

turkey -> duck 변환

public class TurkeyAdapter implements Duck{
    Turkey turkey;

    public TurkeyAdapter(Turkey turkey) {
        this.turkey = turkey;
    }

    @Override
    public void quack() {
        turkey.gobble();
    }

    @Override
    public void fly() {
        for (int i = 0; i < 5; i++) {
            turkey.fly();
        }
    }
}
  • Adapter는 변경 후 객체 타입을 implement하도록 하고, 변경 전 객체를 필드로 둔다.
profile
💻 ☕️ 🏝 🍑 🍹 🏊‍♀️

0개의 댓글