Next:
Pimpl
, Previous:
Array Base Composite
, Up:
Index
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) 패턴은 서로를 직접적으로 알지 못하더라도 서로 연동할 수 있게 해준다.