Java设计模式(13)——结构型模式之桥梁模式(Bridge)

一、概述

  概念

  将抽象实现脱耦,使得抽象和实现可以独立运行

  UML图

  

  角色:

  

  角色关系

  

 二、实践

  按照上面的角色建立相应的类

  抽象化角色

/**
 * 抽象化角色
 *
 * @author Administrator
 **/
public abstract class Abstraction {
    protected Implenmentor impl;
    
    public void operation() {
        impl.operationImpl();
    }
}

  修正抽象角色

/**
 * 修正抽象角色
 *
 * @author Administrator
 **/
public class RefinedAbstraction extends Abstraction{
    @Override
    public void operation() {
        // 修正逻辑
        System.out.println("修正抽象角色");
    }
}

  实现化角色(接口形式)

/**
 * 实现化角色
 *
 * @author Administrator
 **/
public abstract class Implenmentor {
    public abstract void operationImpl();
}

  具体实现化角色(只给出一个示例,可以有多个具体实现)

/**
 * 具体实现角色
 *
 * @author Administrator
 **/
public class ConcreteImplenmentor extends Implenmentor{
    @Override
    public void operationImpl() {
        // 子类重写逻辑
        System.out.println("具体实现子类");
    }
}

   有了以上抽象角色的示例,我们再来看看《Java与模式》中的飞机制造的具体例子:

  引入问题

  

  常规思路如下:

  

  联系最基本的检验原则,检查设计的问题

  

  联系本节桥梁模式,做出改进

  

   抽象角色

/**
 * 飞机类抽象接口
 *
 * @author Administrator
 **/
public abstract class Airplane {
    protected AirplaneMaker airplaneMaker;

    public abstract void fly();
}

  修正角色

/**
 * 载客飞机,作为飞机的修正角色
 *
 * @author Administrator
 **/
public class PassengerAirplane extends Airplane{
    @Override
    public void fly() {
        // 修正逻辑
        System.out.println("修正角色");
    }
}

  

/**
 * 载货飞机,作为飞机的修正角色
 *
 * @author Administrator
 **/
public class CargoPlane extends Airplane{
    @Override
    public void fly() {
        // 修正逻辑
        System.out.println("修正角色");
    }
}

  实现化角色

/**
 * 飞机制造商接口
 *
 * @author Administrator
 **/
public abstract class AirplaneMaker {
    public abstract void produce();
}

  具体实现化角色(此处省略另外的相似的角色)

/**
 * 具体实现角色
 *
 * @author Administrator
 **/
public class Airbus extends AirplaneMaker{
    @Override
    public void produce() {
        // 具体实现逻辑
        System.out.println("具体实现角色");
    }
}

  当然,可以参考更多的例子,参见http://www.cnblogs.com/forlina/archive/2011/06/22/2087350.html

                  http://www.cnblogs.com/Coda/p/4289593.html

   以上的例子都不要拘泥于形式,注意从UML图理解

三、改进与思考

    使用场景

    当一个类的子类需要扩展时,如果要在两个维度进行扩展,那么就可以使用Bridge模式。

原文地址:https://www.cnblogs.com/jiangbei/p/7753929.html