java Bridge Pattern 실습해보기
오늘도 Bridge Pattern을 java로 구현해보려고 합니다.
구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴입니다.
adapter 패턴과 매우 흡사합니다.
코드
이번 패턴은 잘 정리된 위키피디아에서 인용했습니다.
interface Api {
public void draw(double x,double y,double radius);
}
우선 우리가 흔히 알고 있는 API로서 기본 기능을 추상화합니다.
이로인해 인터페이스, 즉 규격이 생겼습니다.
class RealApi implements Api {
public void draw(final double x, final double y, final double radius) {
System.out.println("API1"+ " "+ x + " " + y+ " "+ radius);
}
}
이 인터페이스를 실제로 구현한 클래스를 만듭니다.
abstract class Shape {
Api Api;
Shape(Api Api){
this.Api = Api;
}
public abstract void Realdraw();
}
추상 클래스를 만들어서 인터페이스 API 타입의 변수를 만들고, 생성자를 만들어서 들어오는 인자를 API 타입의 변수에 넣습니다.
그리고, 추상 클래스에 추상 메소드를 넣어줍니다. 이는 위 API 클래스에 있는 기능을 실제 제품에 넣는 역할을 합니다.
class CircleShape extends Shape {
private double x, y, radius;
public CircleShape(double x,double y,double radius,Api drawingAPI) {
super(drawingAPI);
this.x = x;
this.y = y;
this.radius = radius;
}
public void Realdraw() {
Api.draw(x, y, radius);
}
}
이 클래스에서만 쓰는 변수를 접근 지정자 private으로 만들어주고, 생성자를 만들어줍니다.
생성자는 api 타입의 변수까지 작성합니다.
그리고 이 클래스 기능을 넣을 때는 위 api 클래스에 있는 기능을 넣습니다.
이 부분이 마치 adapter 패턴과 유사합니다.
public class Main {
public static void main(String[] args) {
CircleShape shapes = new CircleShape(1, 2, 3, new RealApi());
shapes.Realdraw();
}
}
메인 클래스에서는 테스트차원에서 만들었습니다.
우선 기능 구현부 클래스를 타입으로한 객체를 생성하여 인자를 넣습니다.
마지막으로 api에서 추상화한 메소드를 포팅한 기능 메소드를 실행합니다.
Written on February 9, 2018