Difference between revisions of "Bridge"

From CDOT Wiki
Jump to: navigation, search
(Consequences)
(Consequences)
Line 42: Line 42:
 
The Bridge pattern has the following consequence:
 
The Bridge pattern has the following consequence:
 
<ul>
 
<ul>
<li>Decoupling interface and implementation</li>
+
<li>'''Decoupling interface and implementation''' - inheritance tightly couples an abstraction with an implementation at compile time.  Bridge pattern can be used to avoid the binding between abstraction and implementation and to select implenetation at run time</li>
<li>Improved extensibility</li>
+
<li>'''Improved extensibility''' - extend the Abstraction and Implementor hierarchies independently</li>
<li>Hiding implementation detail from clients</li>
+
<li>'''Hiding implementation detail from clients''' - shield clients from implentation details, like the sharing of implemntor objects and accompanying reference count merchanism</li>
<li>Reduction in the number of sub classes</li>
+
<li>'''Interface and implementation can be varied independently''' - maintaining two different class hierarchies for interface and implementation entitles to vary one independent of the other</li>
<li>Cleaner code and Reduction in executable size</li>
+
<li>'''Lossely coupled client code''' - Abstraction separates the client code from the implementation</li>
<li>Interface and implementation can be varied independently</li>
+
<li>'''Reduction in the number of sub classes'''</li>
<li>Lossely coupled client code</li>
+
<li>'''Cleaner code and Reduction in executable size'''</li>
 
</ul>
 
</ul>
  

Revision as of 18:57, 1 March 2007

Introduction

The bridge pattern is a design pattern used in software developing, decouple an abstraction from its implementation so that the two can vary independently. It is also known as Handle or Body.

UML Structure

Applicability

The Bridge pattern is applicable when:

  • we want to avoid a permanent binding between an abstraction and its implementation
  • both the abstractions and their implementations should be extensible by subclassing
  • changes in the implementation of an abstraction should have no impact on clients
  • we want to hide the implementation of an abstraction completely from clients
  • we want to share an implementation among multiple objects, and this fact should be hiddent from the client

Participants

The classes and/or objects participating in this pattern are:

  • Abstraction
    • defines the abstraction's interface
    • maintains a reference to an object of type Implementor
  • Refined Abstraction
    • extends the interface defined by Abstraction.
  • Implementor
    • defines the interface for implementation classes. This interface does not have to correspond exactly to Abstraction's interface; in fact the two interfaces can be quite different. The Implementation interface provides only primitive operations, and Abstraction defines high-level operations based on these primitives.
  • Concrete Implementor
    • implements the Implementor interface and defines its concrete implementation.

Collaborations

Consequences

The Bridge pattern has the following consequence:

  • Decoupling interface and implementation - inheritance tightly couples an abstraction with an implementation at compile time. Bridge pattern can be used to avoid the binding between abstraction and implementation and to select implenetation at run time
  • Improved extensibility - extend the Abstraction and Implementor hierarchies independently
  • Hiding implementation detail from clients - shield clients from implentation details, like the sharing of implemntor objects and accompanying reference count merchanism
  • Interface and implementation can be varied independently - maintaining two different class hierarchies for interface and implementation entitles to vary one independent of the other
  • Lossely coupled client code - Abstraction separates the client code from the implementation
  • Reduction in the number of sub classes
  • Cleaner code and Reduction in executable size

Implementation

When applying the Bridge pattern, consider the following implementation issues:

  • Only one Implementor
  • Creating the right Implementor object
  • Sharing implementors
  • Using multiple inheritance

Code Examples

Related Patterns

Abstract Factory Adapter

References

Other