Programming - Bridge Structural Design Pattern
Decouple an abstraction from its implementation so that the
two can vary independently.
The classes and/or objects participating in this pattern are:
-
Abstractionand
and and
-
RefinedAbstractionand
and
-
Implementorand
and and
-
defines the interface for implementation classes.
This interface doesn't have to correspond exactly to
Abstraction's interface; in fact the two interfaces
can be quite different. Typically the Implementation
interface provides only primitive operations, and
Abstraction defines higher-level operations based on
these primitives.
- ConcreteImplementor
-
|
// Bridge pattern -- Structural example
|
DoFactory.GangOfFour.Bridge.Structural
{
// MainApp test application
class MainApp
{
static void Main()
{
Abstraction ab =
new RefinedAbstraction();
// Set
implementation and call
ab.Implementor =
new ConcreteImplementorA();
ab.Operation();
// Change
implemention and call
ab.Implementor =
new ConcreteImplementorB();
ab.Operation();
// Wait for
user
Console.Read();
}
}
// "Abstraction"
class Abstraction
{
protected Implementor
implementor;
// Property
public Implementor
Implementor
{
set{ implementor =
value; }
}
public virtual void
Operation()
{
implementor.Operation();
}
}
// "Implementor"
abstract class Implementor
{
public abstract void
Operation();
}
// "RefinedAbstraction"
class RefinedAbstraction :
Abstraction
{
public override void
Operation()
{
implementor.Operation();
}
}
// "ConcreteImplementorA"
class ConcreteImplementorA :
Implementor
{
public override void
Operation()
{
Console.WriteLine("ConcreteImplementorA
Operation");
}
}
// "ConcreteImplementorB"
class ConcreteImplementorB :
Implementor
{
public override void
Operation()
{
Console.WriteLine("ConcreteImplementorB
Operation");
}
}
}
and
Output expected:
ConcreteImplementorA Operation
ConcreteImplementorB Operation
|