一、概述

  概念

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

  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模式。

最新文章

  1. java中异常抛出后代码是否会继续执行
  2. Less 语法特性
  3. pthread 学习
  4. Testing - 测试基础 - 流程
  5. Oracle数据库,内置函数小结
  6. MySQL 编程的6个重要的技巧
  7. BZOJ 3439 Kpm的MC密码
  8. BootStrap2学习日记23---图片轮播
  9. cdoj 574 High-level ancients dfs序+线段树
  10. Android 使用SharedPreference来进行软件配置的存取
  11. 关于yield创建协程的理解
  12. sqlldr用法
  13. STL—list
  14. Echarts数据可视化series-map地图,开发全解+完美注释
  15. 如何合理封装你的轮子、飞机、大炮(以封装OkHttp为例)
  16. 金蝶K3常用数据表
  17. 使用 Kafka 和 Spark Streaming 构建实时数据处理系统
  18. [P4994]终于结束的起点 (递推)
  19. Apache:详解QSA,PT,L,E参数的作用
  20. DevOps:软件架构师行动指南(文摘)

热门文章

  1. mongodb---js脚本操作速记
  2. 模糊搜索框(H5),兼容安卓和ios(令人头大的ios输入法)
  3. 全屏轮播插件 fullPage.js应用(基础版兼容IE7, 背景图版兼容IE8)
  4. ECharts属性设置
  5. 连接IBM MQ原因码报2035的错误解决办法
  6. docker-2-安装
  7. 利用SQL模糊匹配来验证字段是否是日期格式
  8. 如何安装zip格式的MySQL
  9. 锐捷交换机RG-3760-24 的简单配置与VLAN搭建
  10. SignalR 教程一