桥接模式--Bridge
桥接模式--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相关推荐
- c++桥接模式bridge
c++桥接模式bridge 概念 角色和职责 适用于 案例 概念 Bridge 模式又叫做桥接模式,是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不 ...
- 设计模式--桥接模式(Bridge)
设计模式–桥接模式(Bridge) 1.定义 桥接模式:将抽象部分与它的实现部分分离,使它们可以独立地变化. 2.实例 设想如果要绘制矩形.圆形.椭圆.正方形,我们至少需要4个形状类,但是如果绘制的图 ...
- 【愚公系列】2021年12月 二十三种设计模式(七)-桥接模式(Bridge Pattern)
文章目录 前言 一.桥接模式(Bridge Pattern) 二.使用步骤 角色 示例 总结 优点 缺点 使用场景 前言 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分 ...
- 设计模式(16):结构型-桥接模式(Bridge)
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
- 如何让孩子爱上设计模式 ——10.桥接模式(Bridge Pattern)
如何让孩子爱上设计模式 --10.桥接模式(Bridge Pattern) 标签: 设计模式初涉 我有故事,你有酒吗?这年头写个技术文不讲个故事都不行,行,我讲: 还有发现很多的技术博文都开始有喜欢往 ...
- 路由WDS 中继模式Repeater和桥接模式Bridge的区别,同时WDS对网速的影响
WDS (Wireless Distribution System)无线分布式系统,是无线连接两个接入点(AP)的协议.在整个WDS无线网络中,把多个AP通过桥接或中继器的方式连接起来,使整个局域网络 ...
- 【设计模式自习室】桥接模式 Bridge Pattern:处理多维度变化
前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...
- 设计模式之桥接模式(Bridge)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...
- 桥接模式(Bridge)解析例子
桥接模式属于对象结构型模式,其意图是将抽象的部分和它的实现部分分离,使他们都可以独立的变化.当一个抽象可能有多个实现时,通常用继承来协调他们.抽象类的定义对该抽象的接口.而具体的子类则用不同的方式加以 ...
最新文章
- CAN设备多机联网之总线容抗注意事项
- 2021年辽宁省大学生数学建模竞赛题目A题_智慧停车的运营、管理规划
- 【一周入门MySQL—2】单表查询
- [云炬创业学笔记]第二章决定成为创业者测试8
- Python笔记 【无序】 【一】
- 面试题:利用一个栈倒序另外一个栈中的数
- html5怎么设置drop,HTML5 拖放(Drag 和 Drop)
- BZOJ2806(后缀自动机+DP)
- 计算机问题在线解答,2014年计算机专业复习疑难问题答疑
- dll动态库调用约定
- 今天觉得自己好像比较紧张
- ftp安装包_【干货分享】原来cisco通过FTP,TFTP系统升级是这样做的?
- resnet网络结构_ResNet网络详细解析(超详细哦)
- 强化学习的数学基础2---PPO算法
- ERROR Request failed with status code 404 :at createError (node_modules\axios\lib\core\createError.
- (宏)Word修改段落行距为固定值24磅
- 删除数据库中的所有表
- iphone 抹除设备是什么意思_环保设备公司什么意思?|危汇网|
- 13个大数据应用案例,告诉你最真实的大数据故事
- PHP(阿里云短信验证码)
热门文章
- mysql的double和float精度丢失问题
- 2020 年 初中级Java 面试题目大全
- [浪子学编程][读书笔记]-道法自然之用例分析
- FileInputFormat.setInputPaths的执行原理
- 职工信息管理系统开发设计报告版(含源代码)
- 解决gateway使用nacos重启报503 Service Unavailable问题
- AndroidStudio中FindBugs的简单使用教程
- PHASOUND发布超旗舰铂金系列,高端酒吧音响设备还需要买进口品牌吗
- python余弦定理求第三边_python余弦定理计算相似度
- 井字棋版本1.0(对抗人工智障)