设计模式学习笔记-桥接模式

概述:                                                                                                      

将抽象部分与它的实现部分分离,使他们都可以独立的变化。

使用场合:                                                                                                

1.你不希望在抽象和它的实现部分有一个固定的绑定关系。例如这种情况可能是因为程序在运行时刻部分应用可以被选择或者切换。

2.类的抽象以及它的实现都可以通过生成子类的方法加以扩充。

3.对一个抽象的实现部分的修改应对客户不产生影响,即客户端的代码不必重新编译。

4.你想在多个对象之间共享实现,但是同时要求客户并不知道这一点

类图:                                                                                                      

代码示例:                                                                                                 

1.抽象接口类

    abstract class Implementor
{
public abstract void Operation();
}

2.实现抽象接口的派生类A和B

    class ConcreteImplementorA:Implementor
{
public override void Operation()
{
Console.WriteLine(
"具体实现A的方法执行");
}
}
class ConcreteImplementorB:Implementor
{
public override void Operation()
{
Console.WriteLine(
"具体实现B的方法执行");
}
}

3.具体实现的方法的抽象聚合类,但是真正的实现在它的派生类里,即作为中间的桥接重要部分,表达了桥接模式的核心思想

   abstract class Abstraction
{
protected Implementor implementor;

public void SetImplementor(Implementor implementor)
{
this.implementor = implementor;
}
public virtual void Operation()
{
implementor.Operation();
}
}

  

4.继承聚合类并最终实现需要桥接的虚方法,扩充由Abstraction定义的接口

    class RefinedAbstraction:Abstraction
{
public override void Operation()
{
implementor.Operation();
}
}

5.客户端调用

        /// <summary>
/// 测试桥接模式
/// </summary>
static void TestBridge()
{
Abstraction ab
= new RefinedAbstraction();

ab.SetImplementor(
new ConcreteImplementorA());
ab.Operation();

ab.SetImplementor(
new ConcreteImplementorB());
ab.Operation();
Console.Read();
}

小结:                                                                                                        

桥接模式也是封装了变化了一种结构模式抽象,它的核心思想是依赖于抽象,而不依赖的具体的实现,但是很多场合不能直接照搬,大部分复杂案例是将各种设计模式综合到一起,并不是完全套路,就像练武术一样,初学者既要掌握套路又要掌握思想,目前我在学习双节棍,有共同爱好的程序猿可以一起切磋切磋。

posted @ 2011-09-01 10:37  叶鹏  阅读(826)  评论(1编辑  收藏  举报