P.S. The Bridge pattern would be if you had:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
abstact Brush (the Abstraction)
<----- SolidBrush // solid-brush-specific code
<----- PatternBrush // pattern-brush-specific code
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
(Brush references BrushImplementor)
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
abstact BrushImplementor
<----- RGBBrushImplementor // rgb-model-specific code
<----- CYMKBrushImplementor // cymk-model-specific code
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Now, this is not exactly a real world model, but it should give you an idea (i just couldn't come up with anything more appropriate at the moment).
Don't take this as a recommendation for your design - it's just me trying to explain Bridge to you.
In the context of the Bridge pattern, the word "abstraction" doesn't mean "abstract class". It means "abstraction of a concept", as opposed to implementation of what that abstraction does and how it does it.
Here "abstraction" is represented by Brush, but also by SolidBrush and by PatternBrush.
Here's another (again
ad hoc) example to illustrate the point:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
abstact PieChart (the Abstraction)
<----- AnotatedPieChart
<----- StandardPieChart
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
(PieChart references ChartImplementor)
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
abstact ChartImplementor
<----- DirectXChartImplementor
<----- OpenGLChartImplementor
<----- GDIChartImplementor
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~