Bridge(桥接)模式

Posted on 2008-05-17 00:07 Herbert 阅读(520) 评论(0)  编辑 收藏 引用 所属分类: 设计模式
Bridge模式的意图是“将抽象部分和它的实现部分分离,使得它们都可以独立地变化”。
      以一个画图类的设计为例子,假如我需要画一些图形如矩形和圆形,你可能首先想到的做法是先创建一个图形的基类(如:Shape),然后再创建它的派生类:Rectangle(矩形)和Circle(圆形)。然后两个子类都分别实现父类的Draw()方法。

      如果我们需要的类不多,将来也不必要考虑添加新内容的时候,这个设计也不碍事。但当我们所需要的画图类并不只是这两个,还有三角形、菱形、圆角矩形等等的时候,按照这种做法,我们还要为每个图形分别写一个Draw()方法的具体实现。还有一点,这样一个Draw()方法只能对应一种画法,但我们所需要的可能是更多的画法,我们可能不仅仅要画实线矩形,也可能要画虚线矩形。这样一来,我们还要为每个形状写几个Draw()方法,这样就为实现和维护带来很多麻烦了。
      设计模式遵循的其中一个原则是“同一个实现不应该出现在两个不同的地方。”,稍微想一下,你可能就会发现在这些不同形状的Draw()方法里面有很多东西是重复使用了。如果是这样,我们能否把它们集中放到一处地方呢?或者我们可以再添加一个Drawing类,是专门用来处理画图的细节的(比如我们可以用它来画实线、虚线等等),然后把Drawing类聚合到Shape里面,以供其子类调用。

      这就是Bridge模式的意图:将抽象部分和它的实现部分分离,使得它们都可以独立地变化。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理