一、概述

  概念

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

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

Java设计模式(13)——结构型模式之桥梁模式(Bridge)的更多相关文章

  1. Java设计模式之结构型模式

    结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 一.适配器模式: 意图: 将一个类的接口转换成客户希望的另外一个接口.Adapter 模式使得原本由于接 ...

  2. 【设计模式】结构型06享元模式(Flyweight Pattern)

    享元模式(Flyweight Pattern) 首先吐槽下这个名字,享元?共享元素的话感觉还是蛮好的~但是这个英文... 意图:更好的重用.管理对象,减少内存开销,节约资源. 主要解决:在有大量重复对 ...

  3. 【设计模式】结构型03外观模式(Facade Pattern)

    [设计模式]结构型02装饰模式(Decorator Pattern) 意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 主要解决:降低访问 ...

  4. Java设计模式(9)适配器模式(Adapter模式)

    适配器模式定义:将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份. 为何使用适配器模式 我们经常碰到要将两个没有关系的类组合在一起使用 ...

  5. Java设计模式(20)观察者模式(Observer模式)

    Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...

  6. Java设计模式(7)装饰模式(Decorator模式)

    Decorator常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这 ...

  7. 【设计模式】 模式PK:策略模式VS桥梁模式

    1.概述 我们先来看两种模式的通用类图. 两者之间确实很相似.如果把策略模式的环境角色变更为一个抽象类加一个实现类,或者桥梁模式的抽象角色未实现,只有修正抽象化角色,想想看,这两个类图有什么地方不一样 ...

  8. Java 设计模式系列(十八)备忘录模式(Memento)

    Java 设计模式系列(十八)备忘录模式(Memento) 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式.备忘录对象是一个用来存储另外一个对象内部状态 ...

  9. Java 设计模式系列(二十)状态模式

    Java 设计模式系列(二十)状态模式 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式.状态模式允许一个对象在其内部状态改变的时候改 ...

  10. Java 设计模式系列(十五)迭代器模式(Iterator)

    Java 设计模式系列(十五)迭代器模式(Iterator) 迭代器模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(interna ...

随机推荐

  1. web性能权威指南(High Performance Browser Networking)

    web性能权威指南(High Performance Browser Networking) https://www.cnblogs.com/qcloud1001/p/9663524.html HTT ...

  2. mongodb 创建auto increment 自增函数

    计数器表  > db.counters.insert({_id: "userid",seq: 0}  ); > db.counters.find();  { " ...

  3. tp3.2替换模板中如果需要替换的图片在css样式表中怎么办?

    因为标签中的 style 定义的样式可直接覆盖 css样式表中定义的样式,所以可以在要替换的标签中用 style 直接定义样式,具体代码如下: <div class="aboutbg& ...

  4. MBTiles 离线地图演示 - 基于 Google Maps JavaScript API v3 + SQLite

    MBTiles 是一种地图瓦片存储的数据规范,它使用SQLite数据库,可大大提高海量地图瓦片的读取速度,比通过瓦片文件方式的读取要快很多,适用于Android.IPhone等智能手机的离线地图存储. ...

  5. 前端面试题(copy)

    前端开发面试知识点大纲: HTML&CSS: 对Web标准的理解.浏览器内核差异.兼容性.hack.CSS基本功:布局.盒子模型.选择器优先级及使用.HTML5.CSS3.移动端适应. Jav ...

  6. 【oracle】关于创建表时用default指定默认值的坑

    刚开始学create table的时候没注意,学到后面发现可以指定默认值.于是写了如下语句: 当我查询的时候发现,查出来的结果是这样的.. 很纳闷有没有,我明明指定默认值了呀,为什么创建出来的表还是空 ...

  7. Centos7单网卡带VLAN多IP配置

    1.需要使用到vconfig软件,首先yum安装vconfig: 使用指令yum install vconfig:(若是本机找不到vconfig安装包,可以通过其他centos7安装yum-utils ...

  8. iOS | NSProxy

    Objective-C作为一种动态消息型语言,其机制不同于Java ,C#等编译型语言. 它将数据类型的确定等工作推迟到了运行时期来执行,并且它调用方法的方式实质是像对象发送消息,根据selector ...

  9. Linux——查看

    查看当前系统版本: lsb_release -a #没有装:yum install lsb 查看当前运行端口: netstat -atunlp #没有装:yum install net-tools - ...

  10. 用RestTemplate调取接口,取得返回数据,携带header,动态拼接url ,动态参数

    记录我自己的工作 get 请求  ,携带 请求头 header (token) url 根据参数 动态拼接 参数   放入 map  动态拼接 private String lclUrl = &quo ...