Java桥接模式原理及用法解析
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆。
介绍
意图:将抽象部分与实现部分分离,使它们都可以独立的变化。
主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。
何时使用:实现系统可能有多个角度分类,每一种角度都可能变化。
如何解决:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。
关键代码:抽象类依赖实现类。
应用实例: 1、猪八戒从天蓬元帅转世投胎到猪,转世投胎的机制将尘世划分为两个等级,即:灵魂和肉体,前者相当于抽象化,后者相当于实现化。生灵通过功能的委派,调用肉体对象的功能,使得生灵可以动态地选择。 2、墙上的开关,可以看到的开关是抽象的,不用管里面具体怎么实现的。
优点: 1、抽象和实现的分离。 2、优秀的扩展能力。 3、实现细节对客户透明。
缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
使用场景: 1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。 2、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。 3、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。
注意事项:对于两个独立变化的维度,使用桥接模式再适合不过了。
实现
我们有一个作为桥接实现的 DrawAPI 接口和实现了 DrawAPI 接口的实体类 RedCircle、GreenCircle。Shape 是一个抽象类,将使用 DrawAPI 的对象。BridgePatternDemo,我们的演示类使用 Shape 类来画出不同颜色的圆。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Java使用桥接模式实现开关和电灯照明功能详解
本文实例讲述了Java使用桥接模式实现开关和电灯照明功能.分享给大家供大家参考,具体如下: 一.模式定义 桥接模式,也称桥梁模式,在软件系统中,由于自身的逻辑,具有两个或多个维度的变化,如何应对这种多维度的变化,桥接模式使得软件系统能够轻松地沿着多个方向进行变化,而又不引入额外的复杂度. 桥接模式三个关键词为:抽象化,实现化,脱耦 二.模式举例 1 桥接模式分析方法 我们借用电灯照明来说明该模式. 不使用继承,使用对象组合的方式,将开关和电灯的强关联关系变成弱关联关系. 2 桥接模式静态类模型
-
java设计模式之桥接模式(Bridge)
概述 桥接模式一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿. 桥接模式的做法是把变化的部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离.最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要. UML结构图 代码示例 package interview; interface Implementor{ void operationImpl(); } abstract
-
轻松掌握Java桥接模式
定义:将抽象部分与实现部分分离,使它们都可以独立的变化. 特点:桥接模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任.它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展. 企业级开发和常用框架中的应用:多继承的结构 只是从定义理解桥接模式,很难理清它的作用,下面举个例子来说明: 电脑城卖电脑,电脑种类分了平板电脑,笔记本电脑,台式电脑:电脑品牌又分了联想,戴尔,华硕
-
23种设计模式(9) java桥接模式
介绍 桥接模式 (Bridge)将抽象部分与实现部分分离,使它们都可以独立的变化. 桥接模式是一种结构式模式. 结构 代码实现 Implementor : 定义实现接口. interface Implementor { // 实现抽象部分需要的某些具体功能 public void operationImpl(); } Abstraction : 定义抽象接口. abstract class Abstraction { // 持有一个 Implementor 对象,形成聚合关系 protected
-
Java结构型设计模式中的适配器模式与桥接模式解析
适配器模式 定义 适配器模式(英语:adapter pattern)有时候也称包装样式或者包装.将一个类的接口转接成用户所期待的.一个适配使得因接口不兼容而不能在一起工作的类工作在一起. 有两类适配器模式: 1. 对象适配器模式 - 对象适配器通过关联满足用户期待接口,还降低了代码间的不良耦合.在工作中推荐使用"对象适配". 2. 类适配器模式 - 这种适配器模式下,适配器继承自已实现的类(一般多重继承),java中没有多重继承,所以这里不做介绍. 实现 1. Target - 定义C
-
Java设计模式之桥接模式实例详解
本文实例讲述了Java设计模式之桥接模式.分享给大家供大家参考,具体如下: 概念: 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化. 桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量. 什么情况下会用桥接模式? 简单的说就是我们在抽象对象的特征时,对象的特征属性又很抽象,不得不把属性再次抽象. 否则的话,具体子类的数量将会成几何增长,而且不易扩展.没办法维护现有代码. 举例,我们在抽象手机这二个对象时,它的几个属性,如
-
Java 中桥接模式——对象结构型模式的实例详解
Java 中桥接模式--对象结构型模式的实例详解 一.意图 将抽象部分与它的实现部分分离,使他们都可以独立的变化. 二.适用性 以下一些情况使用Bridge模式 你不希望在抽象和它的实现部分之间有一个固定的绑定关系.例如这种情况可能因为,在程序运行时刻实现部分应可以被选择或者切换. 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充.这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对他们进行扩充. 对一个抽象的实现部分的修改应对客户不产生影响,即客户代码不必重新编译
-
Java桥接模式实例详解【简单版与升级版】
本文实例讲述了Java桥接模式.分享给大家供大家参考,具体如下: 桥接模式简单版 一 代码 class Meal { protected MealImp imp; public Meal() { imp = new AmericanMealImp(); } public Meal(String type) { if (type.equals("American")) imp = new AmericanMealImp(); if (type.equals("Italian&q
-
Java桥接模式原理及用法解析
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦. 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类.这两种类型的类可被结构化改变而互不影响. 我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法.其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆. 介绍 意图:将抽象部分与实现部分分离,使它们都可以独立的变化. 主要解决:在有多
-
Python设计模式之桥接模式原理与用法实例分析
本文实例讲述了Python设计模式之桥接模式原理与用法.分享给大家供大家参考,具体如下: 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化. 下面是一个桥接模式的demo: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大话设计模式 设计模式--桥接模式 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独
-
Java多线程volatile原理及用法解析
首先volatile有两大功能: 保证线程可见性 禁止指令重排序 1.保证线程可见性 首先我们来看这样一个程序,其中不加volatile关键字运行的结果截然不同,加上volatile程序能够正常结束,不加则程序进入死循环: package com.designmodal.design.juc01; import java.util.concurrent.TimeUnit; /** * @author D-L * @Classname T001_volatile * @Version 1.0 *
-
Java foreach相关原理及用法解析
foreach其实就是for的加强版,其语法如下: for(元素类型type 元素变量value : 遍历对象obj) { 引用x的java语句; } 举个例子,比如定义一个数组,使用foreach以此输出元素,其中for内部的int a :ar,就是讲数组ar每次循环取出一个数赋给变量a,然后循环打印变量a的值. int[] ar = new int[]{1, 2, 3, 4, 5}; for (int a : ar) { System.out.print(a + " "); } S
-
Java过滤器模式原理及用法实例
过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来.这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准. 实现 我们将创建一个 Person 对象.Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表.CriteriaPatternDemo,我们的演示类使用 Criteria 对象,基于各种标准和它们的结合来过滤 Pe
-
Java设计模式之策略模式原理与用法实例详解
本文实例讲述了Java设计模式之策略模式原理与用法.分享给大家供大家参考,具体如下: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.其中JDK里面的TreeSet类和TreeMap类就用到了策略模式.这两个类是带排序的集合类,其中排序的规则就相当于策略模式里定义的一系列算法,而集合类就相当于是策略模式里的环境类,供用户使用,用只知道TreeSet和TreeMap是带排序的,至于怎么排序的,是由排序的算法决定的. 策略模式
-
Java图形界面Swing原理及用法解析
这篇文章主要介绍了Java图形界面Swing原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JButton组件 布局管理器 FlowLayout 流式布局 BorderLayout 方位布局 GridLayout 表格布局 绝对布局 JLable 组件 文本框组件 JPanel轻量级容器 创建事件监听类 (更换监听类实现监听) 窗口监听适配器 都可使用匿名类实现监听 每个监听方法都可以返回一个Event对象来返回监听值 以上就是本
-
javascript设计模式 – 桥接模式原理与应用实例分析
本文实例讲述了javascript设计模式 – 桥接模式原理与应用.分享给大家供大家参考,具体如下: 介绍:如果软件系统中某个类存在两个或多个独立变化的维度,可以通过桥接模式将这些维度分离出来,使两者可以独立扩展,让系统更符合单一职责原则. 定义:将抽象部分与其实现部分分离,使他们都可以独立的变化.它是一种对象结构型模式,又称为柄体模式或接口模式. 场景:我们做一个简单的画圆,将圆的半径和颜色这两个维度进行分离,使每一个维度都可以单独扩展,很多同学都说这么简单一个需求我5行代码就实现了.为什么写
-
Java反射技术原理与用法实例分析
本文实例讲述了Java反射技术原理与用法.分享给大家供大家参考,具体如下: 本文内容: 产生反射技术的需求 反射技术的使用 一个小示例 首发日期:2018-05-10 产生反射技术的需求: 项目完成以后,发现需要增加功能,并且希望增加功能并不需要停止项目运行. 在希望不关停项目运行的情况下,于是考虑到将功能都放到一个单独的项目之外的模块中,每一个功能实现都从这个模块中获取[实际上这个考虑应该是项目开始前就考虑,这个例子可能不是很好].于是就有了反射的产生.(这种思想有点类似工厂模式,如果学过设计
随机推荐
- Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别
- 9种python web 程序的部署方式小结
- 从断网事件分析DNS服务器拒绝服务攻击
- windows下vue-cli导入bootstrap样式
- JS中getYear()和getFullYear()区别分析
- 用vbs对文本文件的内容进行排序
- Spring整合MyBatis(Maven+MySQL)图文教程详解
- JavaWeb文件上传下载功能深入分析(二)
- JavaScript截取字符串的2个函数介绍
- JavaScript引用类型和基本类型详解
- JS实现slide文字框缩放伸展效果代码
- mysql支持跨表delete删除多表记录
- js left,right,mid函数
- jsPDF导出pdf示例
- shell脚本实现随机生成10个8位密码
- VBScript教程 第八课 使用循环语句
- Android开发中Activity属性设置小结
- 详解用ELK来分析Nginx服务器日志的方法
- 删除重复的记录,并保存第一条记录或保存最后一条记录
- MS SQL Server数据库清理错误日志的方法