클래스의 인터페이스를 사용자가 기대하는 인터페이스 형태로 적응시킵니다.
서로 일치하지 않는 인터페이스를 갖는 클래스들을 함께 동작시킵니다.
방법1
Shape 인터페이스와 TextView를 상속 받아서 구현을 하던지
방법2
TextView의 인스턴스를 TextShape에 포함시키고 TextView 인터페이스를 사용하여 TextShape를 구현
class Point {}
class Manipulator {}
class TextManipulator extends Manipulator{}
class Coord{}
// 기존 정의 되어있는 라이브러리 Shape
interface Shape {
void boundingBox(Point bottomLeft, Point topRight);
Manipulator createManipulator();
}
// 추가 개발하고 싶은 기능 TextView, TextShape
interface TextView {
default void getOrigin(Coord x, Coord y){}
default void getExtent(Coord width, Coord height){}
boolean isEmpty();
}
// 방법 1
class TextShapeType1 implements Shape, TextView {
@Override
public void boundingBox(Point bottomLeft, Point topRight) {
//...
}
@Override
public Manipulator createManipulator() {
return new TextManipulator();
}
@Override
public boolean isEmpty() {
return false;
}
}
// 방법2
class TextShapeType2 implements Shape{
private TextView textView;
public TextShapeType2(TextView textView) {
this.textView = textView;
}
@Override
public void boundingBox(Point bottomLeft, Point topRight) {
//...
}
@Override
public Manipulator createManipulator() {
return new TextManipulator();
}
}
방법1 다이어그램
방법2 다이어그램