Bridge

struct Renderer{
virtual void render_circle(float x, float y, float radius)=0;
};
struct VectorRenderer: Renderer{
void render_circle(float x, float y, float radius) override {
cout<<"Drawing a vector circle of radius "<<radius<<endl;
}
};
struct RasterRenderer: Renderer{
void render_circle(float x, float y, float radius) override {
cout<<"Rasterizing circle of radius "<<radius<<endl;
}
};
struct Shape{
protected:
Renderer& renderer; // 릿
Shape(Renderer& renderer): renderer{renderer} {}
public:
virtual void draw()=0;
virtual void resize(float factor)=0;
};
Shape는 Renderer 타입의 renderer을 참조 변수로서 가진다.(브릿지 패턴)
//
struct Circle: Shape{
float x, y, radius;
void draw() override {
renderer.render_circle(x, y, radius)
}
void resize(float factor) override {
radius*=factor;
}
Circle(Renderer& renderer, float x, float y, float radius): Shape(renderer), x(x), y(y), radius(radius) {}
};
//
RasterRenderer rr;
Circle raster_circle(rr, 5, 5, 5);
raster_circle.draw();
raster_circle.resize(2);
raster_circle.draw();
브릿지를 이용하면 어떤 컴포넌트가 다른 컴포넌트의 상세 구현을 모르더라도 서로 연동할 수 있다.
브릿지 패턴에 연결되는 것들을 서로 알아야 한다.
매개자(Mediator) 패턴은 서로를 직접적으로 알지 못하더라도 서로 연동할 수 있게 해준다.