梦想还是要有的,万一忘了咋办?

0%

桥梁模式

概述

将抽象和实现解耦,使得两者可以独立变化。

类图

upload successful

角色

  • 抽象化(Abstraction)角色
    该角色抽象化的给出定义,并保存一个对实现化对象的引用。
  • 实现化(Implementor)角色
    该角色给出实现化角色的接口,但不给出具体的实现。
  • 修正抽象化(RefinedAbstraction)角色
    该角色扩展抽象化角色,它引用实现化绝角色并对抽象化角色进行修正。
  • 具体实现化(ConcreteImplementor)角色
    该角色对实现化角色接口中的方法进行具体实现。

示例

Implementor.java

1
2
3
public interface Implementor{
public void operationImp();
}

ConcreteImplementor.java

1
2
3
4
5
6
public class ConcreteImplementor implements Implementor{
public void operationImp(){
  //业务代码
   }

}

Abstarction.java

1
2
3
4
5
6
7
8
9
public class Abstraction {
private Implementor imp;
public Abstraction(Implementor imp){
this.imp=imp;
}
public void operation(){
this.imp.operationImp();
}
}

RefinedAbstraction.java

1
2
3
4
5
6
7
8
9
10
public class RefinedAbstraction extends Abstraction{
public RefinedAbstraction (Implementor imp){
super(imp);
}
   //修正父类的方法
   public void operation(){
    //业务代码
}

}

Client.java

1
2
3
4
5
6
7
8
public class Client{
public static void main(String args[]){
  //定义一个实例化角色
       Implementor imp=new ConcreteImplementor();
Abstraction abs=new RefinedAbstraction(imp);
abs.operation();
   }
}

应用

优点

  • 抽象和实现分离是桥梁模式的主要特点,是为了解决继承的缺点而提出的设计模式。该模式下可以不接受抽象的约束,不用绑定在一个固定的抽象层次上。
  • 实现对客户透明,客户端不用关心细节的实现,它已经由抽象层通过聚合关系完成封装。
  • 提高灵活性和扩展性

使用场合

  • 如果一个系统需要再构件的抽象化角色和具体角色之间增加更多的灵活性,避免在两层次之间建立静态的联系
  • 设计要求实现化角色的任何改变不影响客户端,或者说实现化角色的改变对客户端完全透明。
  • 一个构件有多于一个的抽象化角色和实现化角色,系统需要他们之间进行动态耦合。
  • 不希望或不适合使用继承的场合。继承具有强入侵性质,即父类有的方法子类必须有;而桥梁模式是弱关联关系。

实例

upload successful