Skip to content

Latest commit

 

History

History
 
 

BridgePattern

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

桥接模式

定义  

将抽象的部分与它的实现部分分离,使他们都可以独立地变化。
【注】什么是抽象与它的实现分离呢?实现指的就是抽象类和它的派生类用来实现自己的对象,也就是说课程既可以按照课程类别来区分,也可以按照系所来区分。桥接模式适用于这种有多种分类并且各种分类都需要独立变化的情况。   当代码进行了如上的蜕变之后,无论是新加一门数学类的课程,还是新加一个需要选课的系所,都只需要新增一个子类就可以了,这样不仅降低了工作量,还解决了使用继承所带来的高耦合性的问题,并且这样也符合“开闭原则”。  

小结  

桥接模式从效果上来说,解除了不同分类的实现之间的耦合性,使其可以独立地变化。这么说可能有一点晦涩。我们还以前面选课的代码来进行说明,课程与系所由于耦合性的降低,使得增加课程时不会影响系所的代码,同样地增加系所时也不会影响课程的代码。这就是所谓的独立变化。
桥接模式适用于以下几种情况:  

  • 当不希望在抽象和它的实现部分之间有一个固定的绑定关系时。  
  • 当类的抽象以及他的实现都应该可以通过生成子类的方法加以扩充时。  
  • 当对一个抽象类的实现部分的修改应对客户不产生影响时(客户的代码不需要重新编译)。  

在编程过程中进行抽象的方法一般就是创建一个类的层次结构,在这其中,抽象类就处在这个层次结构的最顶端位置,它的作用就是定义好一些抽象的操作集合,在这个层次结构中每一个子类实际上都是抽象操作集合的不同实现方式,但是当需要对这个层次结构做子类化操作时,就会遇到各种各样的麻烦。
通过将前面提到的抽象操作的集合转移到一个接口中,就可以创建一个所谓的桥,这样做的好处就是使我们想要的抽象取决于对这个接口的实现而桥接模式的目的正是将一个抽象和其他抽象操作的实现分离,这样一来,抽象和其他的抽象操作的实现就可以独立地进行改变了。
某个抽象是一个类,那么它必将依赖于抽象方法。前面提到的抽象的层次结构就是最简单的抽象的例子,在这种方式下,父类中的具体方法就必然依赖于其他的抽象方法。当我们遵循原有的层次结构按照另外一种方向继续派生子类的时候,我们就不得不将这些抽象方法也一并移植到其他的层级结构当中去,这时就可以使用桥接模式了,从而将一个抽象与这个抽象中所提供的抽象方法的实现互相分离。