Objective-C 设计模式-桥接模式 (Bridge)

Bridge模式定义

  桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立的变化。桥接模式是比较复杂和难理解的模式之一,要想理解桥接模式,就要理解桥接模式中的“抽象”和“实现”的概念。如果一个抽象类或接口有多个具体实现(多个子类),而这些子类之间有内容概念上的重叠,那么我们就需要将抽象部分和实现部分各自独立出来。抽象部分是指,存在于多个实体中的共同的概念性联系;实现部分是指,抽象部分给出的具体实现,是指怎样去实现客户的需求。

  下图是桥接模式结构图:

 

  图中所示,桥接模式使用对象组合的方式将抽象部分与实现部分彻底的解耦,使得这两部分可以独立的变化。桥接模式涉及的角色有:

  Abstraction抽象化角色,定义了供客户端使用的上层抽象接口,它包含了一个Implementor实例的引用。

  RefinedAbstraction修正抽象化角色,扩展抽象化角色,改变和修正父类对抽象化的定义。

  Implementor实现化角色,定义了实现类的接口,它不必跟Abstraction的接口一致,两个接口可以完全不同。

  ConcreteImplementor具体实现化角色,是对Implementor实现化角色的具体实现。

 

何时使用Bridge模式

  1. 在抽象与实现之间形成了固定的绑定关系,想要将它们分离开来,这样在运行时可以动态的绑定实现部分。
  2. 想让抽象与实现部分都能独立的扩展。
  3. 对抽象的实现进行修改不会影响客户端代码,也就是说实现化的修改对客户端是透明的。
  4. 构件中有多于一个的抽象化角色和实现化角色,说明有必要将它们分成两部分。
  5. 想在带有不同抽象接口的多个对象之间共享一个实现。

Bridge模式实现

   拿生活中的例子来说,汽车在路上行驶,汽车可分小轿车,公共汽车,大卡车等类型,公路也可分高速公路,城市内普通的公路或街道。随着汽车和公路种类的增加,如果用子类化继承的方式去扩展必然会导致增加大量的子类。那么我们可以通过Bridge模式,将抽象与现实分离,公路可作为抽象部分,汽车如何行驶表现的是行为,属于实现部分。具体实现如下图所示:

  桥接模式用于解决多维度变化的问题,上图将两个维度的类分离,使它们可以独立的变化。如果再增加一个维度“人”,不同的人开不同的车在不同的路上行驶。如下图所示:

  

 

Bridge模式优缺点

优点

  1. 分离抽象和实现部分,不必将实现和抽象绑定,极大提高了系统的灵活性,避免抽象和实现之间的静态联系,实现部分可以在运行时动态切换。
  2. 提高了可扩展性,抽象和实现部分可以独立的进行扩展。
  3. 实现部分进行修改不会影响客户端代码,对客户端隐藏了实现细节。

 缺点

  增加了设计复杂度,抽象类的修改影响到子类。

 

 

posted on 2013-06-14 16:30  Markhy  阅读(353)  评论(0编辑  收藏

导航