`
eneasy
  • 浏览: 126348 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

桥接模式

阅读更多
十一. 桥接模式
整理自 《java与模式》阎宏编著


1.意图:

    将抽象化与实现化脱耦,使得两者可以独立地变化。

2.类图:

   

3.原理:
      强关联:编译时期已经确定,无法在运行时期动态更改的关联。

    弱关联:可以动态确定并在运行时期动态更改的关联。

    继承关系是强关联,聚合关系是弱关联。

    桥接模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用合成/聚集关系而不是继承关系,即将强关联变成弱关联,从而使得两者可以相对独立地变化。



4.特征:

    抽象化(Abstraction)角色:抽象化给出定义,并保存一个对实现化对象的引用。

    修正抽象化(refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。

    实现化(Implementor)角色:给出实现化角色的接口,但不给出具体的实现。

    具体实现化(Concrete Implementor)角色:给出实现化角色的具体实现。

       抽象化角色可以通过向不同的实现化对象委派,来达到动态转换自己的功能的目的。可以动态地增加修正抽象化角色和具体实现化角色,而不用修改现有的代码,符合“开-闭”原则。


5.说明:

    桥接模式是对可变化性封装和合成/聚集复用原则的极好例子。

6.使用案例:

    Java 中的Look and feel。

    驱动程序软件。



7.代码:

     // Abstraction.java  抽象化(Abstraction)角色

     public abstract class Abstraction

     {

         private Implementor impl;     

         protected Implementor getImplementor()

         {

             return impl;

         }

         public void operation()

         {

             getImplementor().operationImp();

         }

     }

     // RefinedAbstraction.java  修正抽象化(refined Abstraction)角色

     public class RefinedAbstraction extends Abstraction

    {

         //改进抽象化角色的实现

         public void operation()

         {         

             //improved logic

         }

}

// Implementor.java  实现化(Implementor)角色

public abstract class Implementor

{

     /**

      * Implement this method to provide implementation-specific behavior

      */

     public abstract void operationImp();

}

// ConcreteImplementorA.java 具体实现化(Concrete Implementor)角色A

public class ConcreteImplementorA extends Implementor

{

     /** @see bridge.Implementor#operationImp()*/

     public void operationImp()

     {

         // provide implementation here

     }

}

// ConcreteImplementorB.java 具体实现化(Concrete Implementor)角色B

public class ConcreteImplementorB extends Implementor

{

     /** @see bridge.Implementor#operationImp()*/

     public void operationImp()

     {

         // provide implementation here

     }

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics