桥梁(Bridge)模式:又称Handle/Body。将抽象部分和实现部分分离,使它们都可以独立的变化。桥梁模式属于对象的结构模式。
GOF桥梁模式的示意性结构类图如下:
通过上图可以看出桥梁模式有以下角色:
抽象化(Abstraction)角色:给出抽象化定义并持有一个实现化对象的引用。
修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。
实现化(Implementor)角色:给出实现化的接口角色的接口,但不给出具体的实现。
具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。
桥梁模式在于将抽象和实现分离(也就是我们常说的解耦),让抽象和实现能够独立变化。来举个例子:抽象的车,有火车和汽车,而火车有客车和火车,也就是能运货物和人;汽车也是如此,能运货物和运客人。我们可以如下建立模型:
这种模式将车的属性和行为分类,让车 和运输相互独立演变,类的数量由原来的M*N变成M+N的数量,利用组合方式代替继承,这也符合‘组合聚合复用原则’,组合聚合复用原则讲的是要尽可能使用组合、聚合来达到复用目的而不是利用继承。对于增加一个运输方式或者增加一个车的种类,直接添加即可,不必修改其他类,也只需修改一处即可。
上述描述代码如下:
这种模式将车的属性和行为分类,让车 和运输相互独立演变,类的数量由原来的M*N变成M+N的数量,利用组合方式代替继承,这也符合‘组合聚合复用原则’,组合聚合复用原则讲的是要尽可能使用组合、聚合来达到复用目的而不是利用继承。对于增加一个运输方式或者增加一个车的种类,直接添加即可,不必修改其他类,也只需修改一处即可。上述描述代码如下:
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; } }
package bridge; /** * *作者:alaric *时间:2013-8-2上午7:45:40 *描述:汽车的实现类 */ public class Car extends Vehicle { @Override public void transport() { System.out.print("汽车"); super.transport(); } }
package bridge; /** * *作者:alaric *时间:2013-8-2上午7:45:58 *描述:火车的实现类 */ public class Train extends Vehicle { @Override public void transport() { System.out.print("火车"); super.transport(); } }
package bridge; /** * *作者:alaric *时间:2013-8-2上午7:46:17 *描述:车的实现接口 */ public interface Transport { /** * *作者:alaric *时间:2013-8-2上午7:46:38 *描述:运输 */ public void transport(); }
package bridge; /** * *作者:alaric *时间:2013-8-2上午7:41:00 *描述:货车 */ public class Goods implements Transport{ @Override public void transport() { System.out.println("运货"); } }
package bridge; /** * *作者:alaric *时间:2013-8-1下午10:58:25 *描述:客车 */ public class Guest implements Transport{ @Override public void transport() { System.out.println("运客"); } }
package bridge; /** * *作者:alaric *时间:2013-8-2上午7:45:24 *描述:测试类 */ public class Client { /** *作者:alaric *时间:2013-8-2上午7:45:16 *描述: */ public static void main(String[] args) { //造出一辆火车来 Train train = new Train(); //装入货物 train.setImplementor(new Goods()); //运输 train.transport(); //上客 train.setImplementor(new Guest()); //运输 train.transport(); //造出一汽车来 Car car = new Car(); //装入货物 car.setImplementor(new Goods()); //运输 car.transport(); //上客 car.setImplementor(new Guest()); //运输 car.transport(); } }运行结果如下:
火车运货
火车运客
汽车运货
汽车运客
通过上面代码可以看出,桥梁模式有如下优点:
1、分离接口及实现部分 一个实现不必一直绑定在一个接口上;2、提高可扩充性,使扩展变得简单;
设计模式系列目录:
相关推荐
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
此外,书中还包含了多种设计模式的介绍,这些模式都是面向对象编程中解决常见问题的良方,掌握它们将大大增强开发者在实际项目中的应变能力。 类集框架作为Java语言中对数据结构的一种抽象和实现,是Java EE开发中...
通过《Java设计模式经典搞笑珍藏版》,读者不仅可以学习到设计模式的基本原理和实现方式,还能通过生动的例子加深理解。设计模式是软件开发中非常重要的一部分,掌握了这些模式可以帮助开发者写出更高效、更易维护的...
通过阅读和分析这些代码,我们可以深入理解适配器模式在实际编程中的运用,学习如何在C语言环境中实现这种设计模式。 适配器模式的关键优势在于: - **灵活性**:适配器模式允许我们轻松地添加新的适配器,以适应...
在阅读文章《设计模式——适配器模式(adapter)》时,你可以期待了解到更多关于适配器模式的实战案例、优缺点分析以及如何在实际项目中有效利用这一模式来解决问题。同时,提供的`adapter`压缩包文件可能包含示例...
### Java设计模式——个人总结 #### 一、概述 本文档总结了常见的Java设计模式及其应用,涵盖了十种经典的设计模式,并提供了相应的代码示例。这些设计模式旨在解决软件开发过程中遇到的一系列常见问题,帮助...
java和设计模式ppt包含工厂模式、建造模式、原始模型模式、单例模式、结构模式、适配器、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、行为模式、解释器模式、迭代子模式、调停者模式、备忘录模式...
3. **JDBC(Java Database Connectivity)**:Java与MySQL之间的桥梁,学习如何连接数据库、执行SQL语句、处理结果集以及事务管理。 4. **CRM系统原理**:理解CRM的基本功能,如客户信息管理、销售自动化、市场营销...
以及JAVA中最常见的几种设计模式——工厂模式、观察者模式、单例模式、命令模式、建造者模式、适配器模式、合成模式、桥梁模式等,同时结合清华大学学者张跃平在其著作《JAVA设计模式》中的观点进行阐述。...
通常,一个Java Web应用会基于Model-View-Controller (MVC) 设计模式。Model代表业务逻辑,View负责用户界面展示,而Controller作为两者之间的桥梁,处理用户请求并更新模型数据。 1. **数据库设计**:系统需要一个...
在Java开发中,我们可以采用MVC(Model-View-Controller)设计模式来构建系统架构。Model负责数据的存储和业务逻辑处理,View负责用户界面展示,Controller作为模型和视图之间的桥梁,处理用户的输入并调用相应的...
下面将详细讨论标题和描述中提到的两个主要设计模式——桥梁模式和观察者模式。 1. 桥梁模式(Bridge Pattern) 桥梁模式是一种结构型设计模式,它的主要目的是将抽象部分与实现部分分离,使得它们可以独立地进行...
### Java设计模式之代理模式详解 #### 模式概述 代理模式是软件设计领域中一种常用的设计模式之一,尤其在面向对象编程语言如Java中应用广泛。代理模式的主要目的是为其他对象提供一种代理以控制对这个对象的访问...
《JSP毕业设计——MVC设计模式在游戏卡在线销售系统中的应用》 在这个毕业设计项目中,我们探讨了如何运用MVC(Model-View-Controller)设计模式来构建一个基于JSP的游戏卡在线销售系统。JSP(JavaServer Pages)是...
GOF设计模式,作为《设计模式》一书的核心内容,是Java基础知识与J2EE框架知识之间的桥梁。对于Java开发者而言,掌握接口和抽象类的应用是进阶的关键。设计模式通过展示接口和抽象类在实际案例中的灵活运用,帮助...
《坦克大战——网络版——Java》是一个基于Java编程语言实现的多人在线对战游戏,它在传统的坦克大战游戏基础上增加了网络交互功能,使得玩家可以与朋友或其他玩家进行实时的对战体验。该项目不仅包含了游戏的源代码...
门面模式,作为一种软件设计模式,是EJB(Enterprise Java Beans)中的一种经典模式,它在企业级应用开发中起到简化复杂系统接口的作用。EJB是Java编程语言中用于构建服务器端企业级应用的组件,它们是可分布式部署...
本资源包“10_Java Web——JSP案例资源”旨在为开发者提供一个完整的JSP实践案例,帮助理解并掌握在实际开发中如何运用JSP进行数据的增删查改操作,并采用MVC(Model-View-Controller)设计模式来组织代码,提高代码...