Bridge Pattern (桥接模式)

What exactly does it mean?         
                                                         

The Bridge pattern is an application of the old advice, "prefer composition over inheritance".It becomes handy when you must subclass different times in ways that are orthogonal with one another. Say you
must implement a hierarchy of colored shapes. You wouldn't subclass Shape with Rectangle and Circle and then subclass Rectangle with RedRectangle, BlueRectangle and GreenRectangle and the same for Circle,
would you? 

You would prefer to say that each Shape has a Colorand to implement a hierarchy of colors, and that is the Bridge Pattern.

对上面的阐述可以这样理解,对于Colored Shape,其实是有两个维度的变化,一个是Color,一个是Shape,如果要在一个继承中实现这两个维度的变化,势必会产生诸如RedRectangle之类的类,虽然这也符合关闭原则,但有以下缺点

1. 破坏了类的单一责任原则,RedRectangle既要负责形状,又要负责颜色

2. 代码难以复用,比如RedRectangle 和 RedCircle 中都需要Red,但是这个Red很难被复用

解决之道就是用组合替代继承,用has a 替代
is a,这样Color 和 Shape 就可以独立变化了。 所以使用桥接模式的关键就在于观察类中是否有不同维度的变化,如果有,将这些变化抽象出来,用组合的方式进行关联。

一个典型的应用:

Graphical User Interface Frameworks

Graphical User Interface Frameworks use the bridge pattern to separate abstractions from platform specific implementation. For example GUI frameworks separate a Window abstraction from a Window implementation for Linux or Mac OS using the bridge pattern.

意图:
   将抽象部分与实现部分分离,使它们都可以独立的变化。——《设计模式》GOF 
结构图:

优点:

  • Decoupling interface and implementation. An implementation is not bound permanently to an interface. The implementation of an abstraction can be configured and even switched at run-time.
  • Abstraction and Implementor hierarchies can be extended independently.

Refrence: 

http://www.oodesign.com/bridge-pattern.html

http://stackoverflow.com/questions/319728/when-do-you-use-the-bridge-pattern

http://en.wikipedia.org/wiki/Bridge_pattern

时间: 2024-11-18 18:22:43

Bridge Pattern (桥接模式)的相关文章

设计模式——10桥接模式(Bridge)

10.桥接模式(Bridge)桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化.桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了. 实现代码:先定义接口:[java] view plaincopy public interface S

java中的桥接模式

桥接模式的英文是 Bridge ,桥接模式关注抽象的设计.抽象是指包含了一组抽象方法的类,这些抽象方 法可能包含多个实现. 实现抽象的一般做法是创建类的层次结构,该层次结构的顶部是一个包含抽象 方法的抽象类,该类的每一个子类都提供这些抽象方法的不同实现.但是,当需要对该层次进行子类化时,这 一做法就存在不足了. 你可以创建一个桥,然后把这些抽象方法移到接口中,这样,抽象就依赖于接 口的实现. 桥接模式的意图是:将抽象与抽象方法的实现相互分离来实现解耦,以便二者可以相互独 立的变化. 上面这段话的

.net设计模式实例之桥接模式( Bridge Pattern)

一.桥接模式简介(Brief Introduction) 桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化. Decouple an abstraction from its implementation so that the two can vary independently.. 什么是聚合/组合: 聚合(Aggregation),当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚合关系.聚合是关联关系的一种,是较

C#设计模式(8)——桥接模式(Bridge Pattern)

原文:C#设计模式(8)--桥接模式(Bridge Pattern) 一.引言 这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是--把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视品牌的遥控器都继承这个抽象类,具体设计类图如下: 这样的实现使得每部不同型号的电视都有自己遥控器实现,这样的设计对于电视机的改变可以很好地应对,只需要添加一个派生类就搞定了,但随着时间的推移,用户需要改变遥控器的功能,如:用户可能

第7章 桥接模式(Bridge Pattern)

原文 第7章 桥接模式(Bridge Pattern) 定义:        在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种"多维度的变化"?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式. 意图:     将抽象部分与实现部分分离,使它们都可以独立的变化. 结构图: 举例:KFC中的可乐, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)

原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 示例 有一个Message实体类,对它的操作有Insert()和Get()方法,现在使这些操作的抽象部分和实现部分分离. MessageModel using System;using System.Collections.Generic;us

.NET设计模式-桥接模式(Bridge Pattern)

桥接模式(Bridge Pattern) --.NET设计模式系列之九 Terrylee,2006年2月 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种"多维度的变化"?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式. 意图 将抽象部分与实现部分分离,使它们都可以独立的变化.[GOF <设计模式>] 结构图 图1 Bridge模式结构图 生活中的例子 桥接模式将抽

c++涉及模式 桥接模式(bridge Pattern)

c++涉及模式 桥接模式(bridge Pattern) 考虑这样一个问题: 需要获得一个图形,这个图形可以是圆形,可以是正方形,可以使长方形其颜色可以是蓝色可以是红色可以是绿色,如果这种情况下将设计写死,那么可以 看到有3*3=9 个类,但是图形和颜色更多呢?那么成为一个基本不能完成的任务,那么在这种情况下我们就需一种叫做桥接的设计模式,它的原理同样是 通过虚函数进行解耦合,实现方式 图形抽象类通过一个输入颜色抽象类的指针(依赖)来代表颜色,然后通过保存在一个聚合的颜色抽象类指针成员中,这里

.NET设计模式(9):桥接模式(Bridge Pattern)

概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种"多维度的变化"?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式. 意图 将抽象部分与实现部分分离,使它们都可以独立的变化.[GOF <设计模式>] 结构图 图1 Bridge模式结构图 生活中的例子 桥接模式将抽象部分与它的实现分离,使它们能够独立地变化.一个普通的开关控制的电灯.电风扇等等,都是桥接的例子.开关的目