zoukankan      html  css  js  c++  java
  • bridge

    1 意图:将抽象部分与实现部分分离,使得它们都可以独立地变化

    2 别名:Handle/Body

    3 动机:客户在创建窗口时应该不涉及到具体实现部分。仅仅是窗口的实现部分依赖于应用运行的平台。

               客户代码在创建窗口时,就不应涉及到特定平台。

              接口  实现(Imp)

    4 适用性:

      . 不希望在抽象和实现部分之间有一个固定的绑定关系。在运行时刻,实现部分可以被选择或切换。

      . 类的抽象以及它的实现部分可以通过生成子类的方法加以扩充,可以对不同的接口和实现部分进行组合,分别对它们进行扩充。

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

      . 对客户完全隐藏抽象的实现部分。C++中,类的表示在类接口中是可见的

      . 这种类层次结构成为嵌套的普化

      . 多个对象间共享实现,对客户透明

    5 参与者:

      . Abstraction:

        定义抽象类的接口,维护一个指向Implementor对象的指针。

      . RefinedAbstraction:

        扩充由Abstraction定义的接口

      . Implementor:

        定义实现类的接口,该接口不一定要与Abstraction接口完全一致,实际上二者可以完全不同。

        Implementor提供基本操作,Abstraction定义了基于这些基本操作的较高层次的操作。

      . ConcreteImplementor:实现Implementor接口并定义它的具体实现

    6 协作:

       Abstraction将client的请求转发给它的Implementor对象。

    7 效果:

       有点:

       1)分离接口与其实现部分

           一个接口的实现未必绑定在一个接口上。抽象类的实现可以在运行时刻进行配置,一个对象设置在运行时刻改变它的实现。

           有助于降低对实现部分编译时刻的依赖。改变一个实现类时,不需要重新编译Abstraction和客户程序。

           接口与实现分离,有助于分层,从而产生更好的结构化系统。系统的高层仅需要知道Abstraction和Implementor

      2)提高可扩充性

          可以独立地Abstraction和Implementor的层次进行扩充

      3)实现细节对客户透明:

        

    8 实现:

       注意:

       1)仅有一个Implementor

       2)创建正确的Implementor对象 可以引入一个factory对象,由它创建具体的实现对象

       3)共享Implementor:Handle/Body Body有一个引用计数器,Handle对它进行增减操作。

       4)采用多重继承机制:将抽象接口和它的实现结合起来。 静态继承,所以并非真正的bridge

    9 相关模式:

       . 抽象厂可以创建和配置一个Bridge模式

       . Adapter帮助无关的类协同工作通常系统设计完成后才会被使用。Bridge在设计开始前就使用,抽象接口和实现部分独立改变。

  • 相关阅读:
    1082 射击比赛 (20 分)
    1091 N-自守数 (15 分)
    1064 朋友数 (20 分)
    1031 查验身份证 (15 分)
    1028 人口普查 (20 分)
    1059 C语言竞赛 (20 分)
    1083 是否存在相等的差 (20 分)
    1077 互评成绩计算 (20 分)
    792. 高精度减法
    791. 高精度加法
  • 原文地址:https://www.cnblogs.com/criticalsection/p/5715372.html
Copyright © 2011-2022 走看看