桥接模式--Bridge

  • 摘要
  • 一、桥接模式
  • 二、桥接模式的实现
    • 2.1 场景设计
    • 2.2 代码实现
      • 2.2.1 Store 商店抽象类
      • 2.2.2 KFC 商店具体类KFC
      • 2.2.3 MCD 商店具体类MCD
      • 2.2.4 Chips 薯条抽象类
      • 2.2.5 ChipsHot 薯条具体类
      • 2.2.6 ChipsKetchup 薯条具体类
      • 2.2.7 Hamburger 汉堡抽象类
      • 2.2.8 HamburgerBeef 汉堡具体类
      • 2.2.9 HamburgerChicken 汉堡具体类
      • 2.2.10 Main测试类
      • 2.2.11 测试结果
  • 三、桥接模式的UML图

摘要

  本文通过简洁的模式描述,应用场景的详细代码实现,以及匹配的UML,详解介绍了桥接模式的原理及应用。本文可帮助读者快速掌握桥接模式,以便工作学习中使用桥接模式。

一、桥接模式

  在我们的生活中,一个物体所拥有的功能常常是多样的,比如厨师Tom会做红烧鱼,会做狮子头,而他两年之后又会做小龙虾,所以厨师Tom的烹饪功能在不断的变化。
  程序如同生活,一个对象拥有的方法也是不断变化的,现要实现厨师Tom类的cooking()方法,需要实现红烧鱼方法、狮子头方法,两年之后还要重构厨师Tom类,增加小龙虾方法。由此可见违背了“开闭原则”。同时,若需要一个厨师Damon,他也会做红烧鱼、狮子头、小龙虾,那么又得拷贝一份代码,这样我们的代码重用性很低。
  桥接模式为上面的问题提供了一种解决方式。桥接模式将抽象行为和具体实行进行分离,需要时进行组装即可。对于如上问题,将厨师Tom会的具体烹饪方法分离出来单独成立一个红烧鱼类、狮子头类、小龙虾类。由此可见厨师Tom的烹饪方法增加,不会再去更改源代码,而是新扩展一个功能类,这样就达到了“开闭原则”。

二、桥接模式的实现

2.1 场景设计

  现有KFC和麦当劳两家餐饮店,两家餐饮店都会做汉堡、薯条,汉堡又分为牛肉汉堡、鸡肉汉堡,薯条分为番茄薯条、辣薯条。
  借鉴桥接模式的思想,将牛肉汉堡、鸡肉汉堡、番茄薯条、辣薯条都单独封装成类。若麦当劳制作牛肉汉堡时,只需要将牛肉汉堡类传给麦当劳类,并调用麦当劳类的通用方法cookingHamburger()即可,其他烹饪操作类似。

2.2 代码实现

2.2.1 Store 商店抽象类

package ft.patterns.bridge;public abstract class Store {private Chips chips;private Humburger humburger;public Store(Chips chips, Humburger humburger) {this.chips = chips;this.humburger = humburger;}public Chips getChips() {return chips;}public void setChips(Chips chips) {this.chips = chips;}public Humburger getHumburger() {return humburger;}public void setHumburger(Humburger humburger) {this.humburger = humburger;}public void humburgerCooking() {humburger.humburgerCooking();}public void chipsCooking() {chips.chipsCooking();}
}

2.2.2 KFC 商店具体类KFC

package ft.patterns.bridge;public class KFC extends Store{public KFC(Humburger humburger, Chips chips) {super(chips, humburger);}@Overridepublic void humburgerCooking() {super.humburgerCooking();}@Overridepublic void chipsCooking() {super.chipsCooking();}
}

2.2.3 MCD 商店具体类MCD

package ft.patterns.bridge;public class MCD extends Store{public MCD(Chips chips, Humburger humburger) {super(chips, humburger);}public void humburgerCooking() {super.humburgerCooking();}public void chipsCooking() {super.chipsCooking();}
}

2.2.4 Chips 薯条抽象类

package ft.patterns.bridge;public interface Chips {void chipsCooking();
}

2.2.5 ChipsHot 薯条具体类

package ft.patterns.bridge;public class ChipsHot implements Chips{@Overridepublic void chipsCooking() {System.out.println("I am hot chips.");}
}

2.2.6 ChipsKetchup 薯条具体类

package ft.patterns.bridge;public class ChipsKetchup implements Chips{@Overridepublic void chipsCooking() {System.out.println("I am ketchup chips.");}
}

2.2.7 Hamburger 汉堡抽象类

package ft.patterns.bridge;public interface Humburger {void humburgerCooking();
}

2.2.8 HamburgerBeef 汉堡具体类

package ft.patterns.bridge;public class HumburgerBeef implements Humburger{@Overridepublic void humburgerCooking() {System.out.println("I am beef humburger.");}
}

2.2.9 HamburgerChicken 汉堡具体类

package ft.patterns.bridge;public class HumburgerChicken implements Humburger{@Overridepublic void humburgerCooking() {System.out.println("I am chicken humburger.");}
}

2.2.10 Main测试类

package ft.patterns.bridge;public class Bridge {public static void main(String[] args) {Chips kfcChips = new ChipsHot();Humburger kfcHumburger = new HumburgerBeef();Store kfcStore = new KFC(kfcHumburger,kfcChips);Chips mcdChips = new ChipsKetchup();Humburger mcdHumburger = new HumburgerChicken();Store mcdStore = new KFC(mcdHumburger,mcdChips);kfcStore.chipsCooking();kfcStore.humburgerCooking();mcdStore.chipsCooking();mcdStore.humburgerCooking();  }
}

2.2.11 测试结果

I am hot chips.
I am beef humburger.
I am ketchup chips.
I am chicken humburger.

三、桥接模式的UML图

桥接模式--Bridge相关推荐

  1. c++桥接模式bridge

    c++桥接模式bridge 概念 角色和职责 适用于 案例 概念 Bridge 模式又叫做桥接模式,是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不 ...

  2. 设计模式--桥接模式(Bridge)

    设计模式–桥接模式(Bridge) 1.定义 桥接模式:将抽象部分与它的实现部分分离,使它们可以独立地变化. 2.实例 设想如果要绘制矩形.圆形.椭圆.正方形,我们至少需要4个形状类,但是如果绘制的图 ...

  3. 【愚公系列】2021年12月 二十三种设计模式(七)-桥接模式(Bridge Pattern)

    文章目录 前言 一.桥接模式(Bridge Pattern) 二.使用步骤 角色 示例 总结 优点 缺点 使用场景 前言 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分 ...

  4. 设计模式(16):结构型-桥接模式(Bridge)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

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

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

  6. 路由WDS 中继模式Repeater和桥接模式Bridge的区别,同时WDS对网速的影响

    WDS (Wireless Distribution System)无线分布式系统,是无线连接两个接入点(AP)的协议.在整个WDS无线网络中,把多个AP通过桥接或中继器的方式连接起来,使整个局域网络 ...

  7. 【设计模式自习室】桥接模式 Bridge Pattern:处理多维度变化

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...

  8. 设计模式之桥接模式(Bridge)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

  9. 桥接模式(Bridge)解析例子

    桥接模式属于对象结构型模式,其意图是将抽象的部分和它的实现部分分离,使他们都可以独立的变化.当一个抽象可能有多个实现时,通常用继承来协调他们.抽象类的定义对该抽象的接口.而具体的子类则用不同的方式加以 ...

最新文章

  1. CAN设备多机联网之总线容抗注意事项
  2. 2021年辽宁省大学生数学建模竞赛题目A题_智慧停车的运营、管理规划
  3. 【一周入门MySQL—2】单表查询
  4. [云炬创业学笔记]第二章决定成为创业者测试8
  5. Python笔记 【无序】 【一】
  6. 面试题:利用一个栈倒序另外一个栈中的数
  7. html5怎么设置drop,HTML5 拖放(Drag 和 Drop)
  8. BZOJ2806(后缀自动机+DP)
  9. 计算机问题在线解答,2014年计算机专业复习疑难问题答疑
  10. dll动态库调用约定
  11. 今天觉得自己好像比较紧张
  12. ftp安装包_【干货分享】原来cisco通过FTP,TFTP系统升级是这样做的?
  13. resnet网络结构_ResNet网络详细解析(超详细哦)
  14. 强化学习的数学基础2---PPO算法
  15. ERROR Request failed with status code 404 :at createError (node_modules\axios\lib\core\createError.
  16. (宏)Word修改段落行距为固定值24磅
  17. 删除数据库中的所有表
  18. iphone 抹除设备是什么意思_环保设备公司什么意思?|危汇网|
  19. 13个大数据应用案例,告诉你最真实的大数据故事
  20. PHP(阿里云短信验证码)

热门文章

  1. mysql的double和float精度丢失问题
  2. 2020 年 初中级Java 面试题目大全
  3. [浪子学编程][读书笔记]-道法自然之用例分析
  4. FileInputFormat.setInputPaths的执行原理
  5. 职工信息管理系统开发设计报告版(含源代码)
  6. 解决gateway使用nacos重启报503 Service Unavailable问题
  7. AndroidStudio中FindBugs的简单使用教程
  8. PHASOUND发布超旗舰铂金系列,高端酒吧音响设备还需要买进口品牌吗
  9. python余弦定理求第三边_python余弦定理计算相似度
  10. 井字棋版本1.0(对抗人工智障)