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模式。
Java设计模式(13)——结构型模式之桥梁模式(Bridge)的更多相关文章
- Java设计模式之结构型模式
结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 一.适配器模式: 意图: 将一个类的接口转换成客户希望的另外一个接口.Adapter 模式使得原本由于接 ...
- 【设计模式】结构型06享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern) 首先吐槽下这个名字,享元?共享元素的话感觉还是蛮好的~但是这个英文... 意图:更好的重用.管理对象,减少内存开销,节约资源. 主要解决:在有大量重复对 ...
- 【设计模式】结构型03外观模式(Facade Pattern)
[设计模式]结构型02装饰模式(Decorator Pattern) 意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 主要解决:降低访问 ...
- Java设计模式(9)适配器模式(Adapter模式)
适配器模式定义:将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份. 为何使用适配器模式 我们经常碰到要将两个没有关系的类组合在一起使用 ...
- Java设计模式(20)观察者模式(Observer模式)
Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...
- Java设计模式(7)装饰模式(Decorator模式)
Decorator常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这 ...
- 【设计模式】 模式PK:策略模式VS桥梁模式
1.概述 我们先来看两种模式的通用类图. 两者之间确实很相似.如果把策略模式的环境角色变更为一个抽象类加一个实现类,或者桥梁模式的抽象角色未实现,只有修正抽象化角色,想想看,这两个类图有什么地方不一样 ...
- Java 设计模式系列(十八)备忘录模式(Memento)
Java 设计模式系列(十八)备忘录模式(Memento) 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式.备忘录对象是一个用来存储另外一个对象内部状态 ...
- Java 设计模式系列(二十)状态模式
Java 设计模式系列(二十)状态模式 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式.状态模式允许一个对象在其内部状态改变的时候改 ...
- Java 设计模式系列(十五)迭代器模式(Iterator)
Java 设计模式系列(十五)迭代器模式(Iterator) 迭代器模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(interna ...
随机推荐
- 中间人攻击-ARP毒化
感谢Heee投递 中间人攻击虽然古老,但仍处于受到黑客攻击的危险中,可能会严重导致危害服务器和用户.仍然有很多变种的中间人攻击是有效的,它们能够很容易的欺骗外行并且入侵他们.正如字面意思一样,中间人攻 ...
- Eclipse环境下配置Tomcat,并且把项目部署到Tomcat服务器上
一 配置Tomcat 1.打开Eclipse,单击"Window"菜单,选择下方的"Preferences". 2.单击"Server"选项 ...
- 代码大全读书笔记 Part 1
简单的看了前言,印象最深的还是这本书崇尚"绝不注水"的原则.现实生活中,不仅仅有注水牛肉,瘦肉精的猪肉,很多书籍也是东拼西凑来的内容,不注水的厚书,是十分令人期待的. 第一章:欢迎 ...
- OC NSArray使用
#import <Foundation/Foundation.h> #import "Student.h" #pragma mark 创建一个数组 void array ...
- Yii中POS和GET并用范例
页面 <?php $form=$this->beginWidget('CActiveForm', array( 'id'=>'add-form', 'enableAjaxValida ...
- nssm 在windows上部署服务
简介 NSSM是一款可将Nodejs项目注册为Windows系统服务的工具.当你的Node.js项目需要部署在Windows Server上时,NSSM是一个不错的选择. 特点 NSSM将Node.j ...
- fastjson是什么东东?
fastjson是一个Java语言编写的高性能功能完善的JSON库.它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库.Fastjson ...
- 十二、IntelliJ IDEA 中的版本控制介绍(中)
由于 IntelliJ IDEA 支持的版本控制工具非常的多,但咱们真正能够用到的也就两三个而已,因此在本篇博文中,咱们主要介绍 SVN.Git 和 GitHub 的配置方法. SVN 如果想要在 I ...
- GoBelieve-国内唯一开源IM服务
GoBelieve-国内唯一开源IM服务 1. 一小时接入 专注IM,无冗余功能 几行代码,一小时接入 省时省力. 2. 自由定制 提供最新源码, 自行二次开发,业务协议 交互视觉均可根据业务需求 自 ...
- 个人开发者即时到账收款方案 BufPay.com
BufPay 个人即时到账支付平台 前言 作为独立开发者,一般只有一个人独立奋战,做出了产品需要收款是非常麻烦的,接入支付宝微信支付都需要公司公户,而注册公司.开公户等一系列操作非常麻烦,成本也很高一 ...