桥接模式定义


將抽象部分与它的具体实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体模式或接口模式。
Decouple an abstraction from its implementation so that the two can vary independently.
单从定义来看,读者未必能够真正理解桥接模式的含义,假设我们有这样的应用场景,在一个CAD系统中我们需要绘制矩形、圆形、长方形三种图形,同时绘制的图形需要有蓝色、红色、绿色三种版本,此时我们至少有两种设计方案:
1.为每一种形状各自提供一套不同颜色的版本。
2.根据实际需要对图形和颜色进行任意组合。
两种设计方案对比:
第一种方案需要9个类,而且每增加一个颜色或图形系统中都要增加多个类。
第二种只需要6个类,且每增加一个一个形状或颜色只增加一个类。
像这种有两个维度的情况采用方案二进行设计,能够减少系统中类的个数,且系统扩展更为方便。设计方案二就是传说中的桥接模式的应用。桥接模式將继承关系转换为聚合关系,从而降低了类之间的耦合度。
桥接模式结构

桥接模式结构如下图所示:
桥接模式包含如下几个角色:
  • Abstraction:抽象类
  • RefinedAbstraction:扩充抽象类
  • Implementor:实现类接口
  • ConcreteImplementor:具体实现类

源代码

实现类接口Implementor:
public interface Implementor {void operationImpl();
}

实现类ConcreteImplementorA:

public class ConcreteImplementorA implements Implementor{@Overridepublic void operationImpl() {System.out.println("ConcreteImplementorA operationImpl");}}

实现类ConcreteImplementorB:

public class ConcreteImplementorB implements Implementor{@Overridepublic void operationImpl() {System.out.println("ConcreteImplementorB operationImpl");}}

抽象类Abstraction:

public class ConcreteImplementorB implements Implementor{@Overridepublic void operationImpl() {System.out.println("ConcreteImplementorB operationImpl");}}

扩充抽象类RefinedAbstraction代码:

public class RefinedAbstraction extends Abstraction{@Overridepublic void operation() {this.getImpl().operationImpl();}}

客户端Client:

public class Client {public static void main(String[] args) {Abstraction abs = new RefinedAbstraction();//具体实现交给客户端选择Implementor impl = new ConcreteImplementorB();abs.setImpl(impl);abs.operation();}
}

桥接模式的核心思想就是变继承关系为聚合关系,再回到绘制不同颜色图形的例子,使用桥接模式设计类图如下,具体的颜色由客户端进行选择。

转载于:https://www.cnblogs.com/lanzhi/p/6468481.html

设计模式之桥接模式(Java语言描述)相关推荐

  1. 过滤器用到了java哪个模式_设计模式之过滤器模式——Java语言描述

    过滤器模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来 实现 创建一个Person对象.Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列 ...

  2. java语言描述一个行为_设计模式之责任链模式——Java语言描述

    责任链模式为请求创建了一个接受者对象的链.这种模式给予请求的类型,对请求的发送者和接受者进行解耦.这种类型的设计模式属于行为模式.在这种模式下,通常每个接收者都包含对另一个接收者的引用.如果一个对象不 ...

  3. java桥接和装饰_设计模式:桥接模式和装饰模式

    原标题:设计模式:桥接模式和装饰模式 一.桥接模式简介 1.基础描述 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥梁模式的用意是&qu ...

  4. java 设计模式之桥接模式,策略模式

    java 设计模式之桥接模式,策略模式 1.引出设计模式 相信大家都玩过王者荣耀这款游戏.我们知道现在大概有九十多个英雄且各自技能及背景故事.台词.被动都不一样而且还带着召唤师技能比如实现,惩戒,弱化 ...

  5. java 懒加载模式_JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载

    我写的程序员面试系列文章 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Jav ...

  6. 如何让孩子爱上设计模式 ——10.桥接模式(Bridge Pattern)

    如何让孩子爱上设计模式 --10.桥接模式(Bridge Pattern) 标签: 设计模式初涉 我有故事,你有酒吗?这年头写个技术文不讲个故事都不行,行,我讲: 还有发现很多的技术博文都开始有喜欢往 ...

  7. 算法java语言描述_java语言描述数据结构与算法崔笑颜的博客

    java语言描述数据结构与算法崔笑颜的博客 冒泡排序 插入排序 选择排序 希尔排序 快速排序 归并排序 二分查找package com.demo.test; import java.util.Arra ...

  8. C++设计模式之桥接模式

    这篇文章主要介绍了C++设计模式之桥接模式,本文讲解了什么是桥接模式.为什么要使用桥接模式.什么时候使用桥接模式等内容,需要的朋友可以参考下 问题描述 现在要去画一个图形,图形有长方形.圆形和扇形等等 ...

  9. State_状态模式_PHP语言描述

    2019独角兽企业重金招聘Python工程师标准>>> State_状态模式定义: 允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎改变了它的类. 应用State_状态模式 ...

  10. 《数据结构与抽象:Java语言描述(原书第4版)》一JI2.3 抛出异常

    本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. H ...

最新文章

  1. AribaWeb 框架学习系列之一
  2. freebsd原理与设计精要(1)-freebsd与unix简介
  3. 压力测试网站_一行命令就能网站压力测试和网站故障排除
  4. 设备树(device tree)学习笔记
  5. sublime 3 前端神器详细 安装教程
  6. 如何PDF转Word文档?快把这些方法收好
  7. 你不知道的JavaScript(上卷)- - 书本知识点记录
  8. python的def语句_关于语法:python def函数:如何指定函数的结尾?
  9. java 向路由器发送报文_9.IP选路 - loda0128的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. 索尼公布电池召回计划 不局限于笔记本
  11. 内存设置无效: 内存预留 (sched.mem.min) 应该等于内存大小 (65536)
  12. 手机变速齿轮_手机app变速齿轮
  13. 企业微信怎么群发消息到群?企业微信客户群群发有什么限制?
  14. win7计算机自动关机设置在哪里设置方法,win7自动关机怎么设置?W7自动关机命令设置方法...
  15. IDEA项目发布中,Web Application:Exploded和Web Application:Archive的详细解释
  16. 熔喷布喷丝板模具微孔加工技术工艺
  17. jdk-8u191-windows-x64.exe下载
  18. Python 经典面试题汇总之框架篇
  19. nextcloud服务器配置文档,NextCloud挂载数据盘
  20. 如何系统学习VCU电控开发

热门文章

  1. filter过滤器(转载)
  2. C#算法 质因数 最大公约数与最小公倍数
  3. 【贪心School】机器学习课程笔记
  4. jni hook java_java通过jni调用hook无效
  5. java 有意思面试题_一些JAVA中有趣的面试题
  6. java虚拟机手机系统,微软java虚拟机
  7. 台式计算机的速度,USB3.0有多快?平民级最简单测试告诉你
  8. python文本替换 数据库_用几行python代码实现大量文本文件里的文本替换
  9. api.cls.php文件,php数据POST提交到API接口
  10. 克隆卡设备_SD Clone for mac(SD卡克隆备份软件) v3.2