桥梁模式Bridge

桥梁模式:又称柄体模式【GOF95】桥梁模式的用意是"将抽象化 (Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化"。

关键词: 抽象化、实现化、脱耦

脱耦:

 所谓耦合就是两个实体之间存在某种强关系,比如说java中的继承。所谓脱耦就是将两个实体之间存在的这种强关系去掉,或者将两者之间的关系改为弱关系。

 java类之间的关系分为:继承、实现、依赖、聚合、关联、组合。

 强关系:继承、实现

 弱关系:依赖<聚合<关联<组合。

 依赖是一种非常弱的关系,一种临时、偶然的关系,如:表现为一个类A的一个方法传入一个类B当参数。

 聚合是一种has-a的关系,如:一台电脑有一个cpu,这里的电脑和cpu是一种整体与部分的关系,表现为一个类A引用了一个类B作为属性。

 关联是一种平等关系,如:我和我的朋友,这里我和我的朋友是平等的,表现为一个类A引用一个类B作为属性,和聚合关系表现一直。

  组合是一种比较强的关联关系contains-a:如:我和我的心脏,这里我和我的心脏是整体和部分的关系,但这两者之间的关系式不可以分割的,但我消失心脏就随之消失。代码上的表现和关联关系一致。

桥梁模式的结构:

 实现图:



 
从图中不难看出:

1、Abstracion与RefinedAbstaraction组成的一个抽象化等级结构。

2、Implementor与ConcreteImplementorA、ConcreteImplementorB组成一个实现化等级结构。

图中角色定义:

Abstracion抽象化角色:定义抽象对象,并对Implementor实现化对象进行引用。

RefinedAbstracion抽象化对象的实现:对父类的修改。

Implementor实现化对象:约定实现对象的行为,没有具体的实现。

ConcreteImplementor:实现化对象行为的实现。

抽象化角色就像是一个水杯的手柄,而实现化角色和具体实现化角色就像是水杯的杯身。手柄控制杯身,这就是此模式别名“柄体”的来源。

 具体代码:

//抽象化
public abstract class Abstraction{
    protected Implementor impl;//聚合体现

    public Abstraction(Implementor impl){
        this.impl=impl;
    }

    public void operation(){
       impl.operationImpl();//委派对象调用方法
    }
    
}

//抽象化对象实现
public class refinedAbstraction extends Abstration{

   public refindedAbstraction(Implementor impl){
        this.impl=impl;
   }

   //其他方法
   public void otherOperation(){
        
   }
}

//实现化
public interface Implementor{
   public void operationImpl();
}

//实现
public class ConcreteImplementorA implements Implementor{

   public void operationImpl(){

   }
}

public class ConcreteImplementorB implements Implementor{

   public void operationImpl(){

   }
}
main(){
  RefinedAbstractor r=new RefinedAbstractor (new ConcreateImplementorA());

 r.operation();

}

 适用场景:

    1、一个抽象对象,有各种各样的行为。比如:数据库的链接,采用JDBC连接。可以把JDBC抽象化一个对象,这个对象可以链接不同的数据库(不同的行为实现)。这时可采用桥梁模式。

    桥梁模式使用频率不高,在一些框架中都采用IOC(控制反转)中的依赖注入(DI)方式,来减少对象之间的耦合程度。

    如果不明白的同学可以看看IOC的原理,其实就是通过反射(类型或者类名),动态生成类。

猜你喜欢

转载自wdt1988520.iteye.com/blog/1969149