【设计模式 - 6】之桥接模式(Bridge)
2016-12-11 08:21
316 查看
1 模式简介
举个例子,人、车和公路是三个维度,人开着车在公路上行驶,就是将这三个维度进行了关联。人分男人(Man)和女人(Woman),车分小轿车(Car)和公共汽车(Bus),公路分市区公路(Street)和高速公路(Speedway),那么如果我们不使用桥接模式的话,要模拟出所有情况,系统的架构应该是如下图所示的:从图中可以很容易的看出,这个系统中的类太多了,需要对每种情况都进行考虑,而且如果系统中的维数一多,类中的类就会爆炸。为了解决这个问题,一种解决思路就是使用桥接模式。
桥接模式定义:将抽象部分与实现部分分离,让它们都可以独立的变化。
桥接模式的适用情况:
当系统中的维数过多,类的个数随着维数的增多会急剧增加时。
桥接模式的优点:
1) 实现了抽象和实现的分离;
2) 有很好的扩展能力;
3) 将不同维度放在同一个平面上;
4) 实现细节对用户透明。
桥接模式的缺点:
不同维度的关联关系都被放在了抽象层,加大了系统设计的难度。
上面例子,经过桥接模式处理之后的UML图如下所示:
2 代码
2.1 需求
和上面的例子相似,只不过我们换一个例子:一个系统中有三个维度,人(Person)包括男人(Man)和女人(Woman);画笔(Drawer)包括铅笔(Pencil)和钢笔(Pen);图形(Shape)包括圆形(Circle)和矩形(Rectangle)。搭建项目框架,使得最终的输出格式如“男人用铅笔画了一个圆形”的格式。
2.2 分析
这个项目的UML图如下图所示:2.3 代码
Shape父类中的代码:public abstract class Shape { abstract void introduce(); }Shape的一个子类Circle类中的代码:
public class Circle extends Shape { @Override void introduce() { System.out.print("圆形"); } }Drawer父类中的代码:
public abstract class Drawer { public Shape shape; abstract void drawShape(); }Drawer类的一个子类Pencil类中的代码:
public class Pencil extends Drawer { @Override void drawShape() { System.out.print("用铅笔画了一个"); super.shape.introduce(); } }Person类中的代码:
public abstract class Person { public Drawer drawer; abstract void draw(); }Person的一个子类Man类中的代码:
public class Man extends Person { @Override void draw() { System.out.print("男人"); super.drawer.drawShape(); } }
2.4 测试
测试类中的代码:public class Test { public static void main(String[] args) { Shapecircle = new Circle(); Drawerpencil = new Pencil(); pencil.shape = circle; Personman = new Man(); man.drawer = pencil; man.draw(); System.out.println(); } }测试结果如下图所示:
最后贴出桥接模式的GitHub代码:【GitHub - Bridge】。
相关文章推荐
- 设计模式学习笔记(八)——Bridge桥接
- 设计模式之桥接模式(Bridge)
- 设计模式笔记--结构型模式之二--桥接 Bridge
- 设计模式学习笔记(八)——Bridge桥接模式
- .NET设计模式(9):桥接模式(Bridge Pattern)
- .NET设计模式-桥接模式(Bridge Pattern)
- 设计模式--桥接模式(Bridge)
- 设计模式--桥接模式(Bridge)
- Java设计模式(三)Adapter(适配器),Bridge(桥接)
- 设计模式之Bridge桥接设计模式
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
- 设计模式之桥接(Bridge)---对象结构性模式
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
- .NET设计模式-桥接模式(Bridge Pattern)
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
- 设计模式之Bridge(桥接)
- Java设计模式-----Bridge桥接模式
- .NET设计模式(9):桥接模式(Bridge Pattern)
- 设计模式-----桥接模式(Bridge Pattern)
- 设计模式之桥接模式(Bridge)