转自:http://alaric.iteye.com/blog/1918381
桥梁(Bridge)模式:又称Handle/Body。将抽象部分和实现部分分离,使它们都可以独立的变化。桥梁模式属于对象的结构模式。 GOF桥梁模式的示意性结构类图如下:
通过上图可以看出桥梁模式有以下角色:
抽象化(Abstraction)角色:给出抽象化定义并持有一个实现化对象的引用。 修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。 实现化(Implementor)角色:给出实现化的接口角色的接口,但不给出具体的实现。 具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。
桥梁模式在于将抽象和实现分离(也就是我们常说的解耦),让抽象和实现能够独立变化。来举个例子:抽象的车,有火车和汽车,而火车有客车和火车,也就是能运货物和人;汽车也是如此,能运货物和运客人。我们可以如下建立模型:
这种模式将车的属性和行为分类,让车 和运输相互独立演变,类的数量由原来的M*N变成M+N的数量,利用组合方式代替继承,这也符合‘组合聚合复用原则’,组合聚合复用原则讲的是要尽可能使用组合、聚合来达到复用目的而不是利用继承。对于增加一个运输方式或者增加一个车的种类,直接添加即可,不必修改其他类,也只需修改一处即可。
上述描述代码如下:
这种模式将车的属性和行为分类,让车 和运输相互独立演变,类的数量由原来的M*N变成M+N的数量,利用组合方式代替继承,这也符合‘组合聚合复用原则’,组合聚合复用原则讲的是要尽可能使用组合、聚合来达到复用目的而不是利用继承。对于增加一个运输方式或者增加一个车的种类,直接添加即可,不必修改其他类,也只需修改一处即可。上述描述代码如下:Java代码
- package bridge;
- /**
- *
- *作者:alaric
- *时间:2013-8-2上午7:41:31
- *描述:车的抽象类
- */
- public abstract class Vehicle {
-
- private Transport implementor;
-
- public void transport(){
- implementor.transport();
- }
- public Transport getImplementor() {
- return implementor;
- }
- public void setImplementor(Transport implementor) {
- this.implementor = implementor;
- }
-
- }
Java代码
- package bridge;
- /**
- *
- *作者:alaric
- *时间:2013-8-2上午7:45:40
- *描述:汽车的实现类
- */
- public class Car extends Vehicle {
-
- @Override
- public void transport() {
-
- System.out.print("汽车");
- super.transport();
- }
-
- }
Java代码
- package bridge;
- /**
- *
- *作者:alaric
- *时间:2013-8-2上午7:45:58
- *描述:火车的实现类
- */
- public class Train extends Vehicle {
-
- @Override
- public void transport() {
-
- System.out.print("火车");
- super.transport();
- }
-
- }
Java代码
- package bridge;
- /**
- *
- *作者:alaric
- *时间:2013-8-2上午7:46:17
- *描述:车的实现接口
- */
- public interface Transport {
-
- /**
- *
- *作者:alaric
- *时间:2013-8-2上午7:46:38
- *描述:运输
- */
- public void transport();
-
- }
Java代码
- package bridge;
- /**
- *
- *作者:alaric
- *时间:2013-8-2上午7:41:00
- *描述:货车
- */
- public class Goods implements Transport{
-
- @Override
- public void transport() {
-
- System.out.println("运货");
- }
-
- }
|