开篇前言

遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样,时维十一月,眼看着光棍节就那么轻轻的来了,没有预告,没有准备`(*∩_∩*)′,是否想在双十一摆脱单身,和亲爱的ta牵手漫步,在寒风中紧紧相拥,都说艺术来源于生活,却高于生活,作为人类智慧的结晶设计模式,她蕴藏着丰富的撩妹技术,今天这篇博文,小编主要介绍桥接模式中的撩妹神技。

什么是桥接模式

在软件系统中,某些类型由于自身的逻辑,她具有两个或者多个维度的变化,那么如何应对这种多维度的变化?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而不引入额外的复杂度,于是,桥接模式伴随着第一声的啼哭,来到这个世界`(*∩_∩*)′,桥接模式,将抽象部分与她的实现部分分离,使她们可以独立的变化,我们来看一下桥接模式的结构图:

桥接模式中的撩妹神技

接着,小编就来举一个例子,帮助小伙伴们更好的了解桥接模式以及桥接模式中的撩妹神技,新建项目,项目 名称Bridge,新建类MM,我们给MM一个属性,编写相关的代码部分,如下所示:

package com.dp.bridge;public class MM {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}

新建类Boy,也就是追MM的人,编写相关的代码部分,如下所示:

package com.dp.bridge;public class Boy {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}

运用面向对象的思维,男孩儿追MM,这个应该怎么样进行封装呢?亲爱的小伙伴们,可以想一想哦,我们可以这样来写,代码如下所示:

package com.dp.bridge;public class Boy {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public void pursue(MM mm){}}

那么追MM的方法有什么呢?送鲜花?送巧克力?牵手?所以我们的代码就可以这样来写,在写追MM的方法之前,我们需要按照面向对象的方法,我们来创建一个类Gift,你送MM一个礼物,不能单一是不是,得要五花八门,层出不穷,千变万化,不能千篇一律,最常见的礼物有什么呢?可以有鲜花,so,我们创建一个鲜花的类:

package com.dp.bridge;public class Flower extends Gift {}

当然,如果你是土豪,还可以送MM钻戒,俘获她的芳心,让她拜倒在你的石榴裙下`(*∩_∩*)′,同样的,我们可以新建一个钻戒类Ring。这个时候,Boy追MM的方法就有很多了,so,我们来编写Boy追MM的方法:

package com.dp.bridge;public class Boy {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public void pursue(MM mm){Gift g = new Ring();give(g,mm);}public void give(Gift g,MM mm){}}

不过呢?作为礼物,我们可以从另外一个角度来做区分,如果你要追的是一个温柔的MM,这个时候,你就需要送一个温柔的礼物,我们可以新建一个类WarmGift,如下所示:

package com.dp.bridge;public class WarmGift extends Gift {}

当然啦,如果你追的MM比较狂野,你可以送一个狂野的礼物,让她对你死乞白赖`(*∩_∩*)′,所以我们新建一个WildGift。作为礼物来说,在她往子类发展的时候,他会有两个维度上的扩展,一种是具体的维度,比如说Ring,还有一个种是类型上的划分,比如温柔类型的WormGift,两个维度扩展的时候,他们之间可能会有交叉,小伙伴们看下面这张类图,就明白了`(*∩_∩*)′

她们会有各种各样的排列组合,如此下去,你会发现子类是无穷无尽的。这个时候,我们可以采用桥接模式进行设计,我们需要增加一个新的类,具体的礼物的实现:

package com.dp.bridge;public class GiftImpl {}

让Ring和Flower都继承我们的GiftImpl,这个时候,Gift和GiftImpl之间的关系就会变成聚合,我们可以这样来实现:

package com.dp.bridge;public class Gift {protected GiftImpl impl;
}

用聚合代替继承,如果这个时候要送一个温暖的花儿,我们该如何实现呢?如下所示:

package com.dp.bridge;public class WarmGift extends Gift {public WarmGift(GiftImpl impl){this.impl=impl;}}

当然,如果你想送一个狂野的戒指,可以这样来编写:

package com.dp.bridge;public class WildGift extends Gift {public WildGift(Ring ring){this.impl = impl;}
}

这个时候,如果你想用worm  flower,我们可以在Boy中这样写,代码如下所示:

package com.dp.bridge;public class Boy {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public void pursue(MM mm){
//      Gift g = new Ring();
//      give(g,mm);
//      Gift g = new WarmGift(new Flower());Gift g = new WildGift(new Ring());}public void give(Gift g,MM mm){}}

这样,我们排列组合起来就非常方便了,这就是我们的桥接模式,如果子类的扩展有两个维度,那么这个时候你想解耦合,解决排列组合的问题,我们就可以使用桥接模式。
     桥接模式的优缺点

优点:

a、分离抽象和实现部分
桥接模式分离了抽象部分和实现部分,从而极大地提高了系统的灵活性,让抽象部分和实现部分独立开来,分别定义接口,这有助于对系统进行分层,从而产生更好的结构化的系统,对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了。
b、更好的扩展性
由于桥接模式把抽象部分和实现部分分离开了,而且分别定义接口,就这使得抽象部分和实现部分可以分别独立的扩展,而不会相互影响,从而大大的提高了系统的扩展性。
c、可动态的切换实现
由于桥接模式把抽象部分和实现部分分离开了,所以在实现桥接的时候,就可以使实现动态的选择和使用具体的实现,也就是说一个实现不再是固定的绑定在一个抽象接口上了,可以实现运行期动态的切换。
d、可减少子类的个数
根据前面的讲述,对于两个变化维度的情况,如果采用继承的方式实现,大约需要两个维度上的可变换数量的乘积个子类,而采用桥接模式来实现,可以明显的减少子类的个数。
缺点:
a、桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
b、桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。

桥接模式的应用场景

a、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
b、抽象化角色和实现化角色可以以继承的方式独立扩展而互不影响,在程序运行时可以动态将一个抽象化子类的对象和一个实现化子类的对象进行组合,即系统需要对抽象化角色和实现化角色进行动态耦合。
c、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。
d、虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。
e、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。

小编寄语:该博文小编主要介绍了设计模式中的桥接模式,从什么是桥接模式、模式的结构图,桥接模式的demo、桥接模式的应用场景以及她的使用场景,她可是一个撩妹神奇的设计模式哦`(*∩_∩*)′,所以嘛,工作、生活、学习、恋爱都是相互关联的,把学习到的知识用到生活中,用到追MM上,是不是觉得学起来一下子就变得简单轻松和快乐,祝愿小伙伴们赶紧在双十一前脱单,找到你人生中的soul mate,在下篇博文中,小编将继续介绍设计模式中的撩妹神技,敬请期待`(*∩_∩*)′。

设计模式中的撩妹神技--上篇相关推荐

  1. 撩妹java代码_Java程序媛深入浅出设计模式中的撩妹神技--中篇

    开篇前言 遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样,时维十一月,眼看着光棍节就那么轻轻的来了,没有预告,没有准备`(* ...

  2. 设计模式中的撩妹神技--下篇

         开篇前言 遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样,时维十一月,眼看着光棍节就那么轻轻的来了,没有预告,没有 ...

  3. 撩妹java代码_Java程序媛深入浅出设计模式中的撩妹神技--下篇

    开篇前言 遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样,时维十一月,眼看着光棍节就那么轻轻的来了,没有预告,没有准备`(* ...

  4. ios 权限提示语_撩妹神技?iOS 微信偷偷上线“拍一拍”

    微信 概要 / 最近微信新功能不断,安卓和 iOS 前后上线了「修改微信号」功能,给了网友们"重新做人"的机会,这不,又来了一个新功能,iOS 的微信可以"拍一拍&quo ...

  5. 程序员撩妹神操作,看完我是绝望的!

    看什么看!点我呀! 全栈程序员,免费入门到精通! 作者丨圈T社区 提醒:本文不是为了黑程序员,我本身也是程序员,本文章只是为了给大家周末愉快放松一下~ 每一个程序员都很有实力:他们有的笔试面试全AC, ...

  6. OSChina 周二乱弹 ——女王节 教你撩妹新技能

    2019独角兽企业重金招聘Python工程师标准>>> 女王节 无论你的她,是女汉子,还是女神(经) 3.8这天,她都是女王 这天女王们地位无比高尚! 要伺候好你们的女王大人哦! 能 ...

  7. 『设计模式』撩妹秘籍竟是使用设计模式的抽象工厂模式

    23种设计模式+额外常用设计模式汇总 (持续更新) 引入:可以跳过 如果存在一部撩妹的手机,加上一个后宫,请问你该怎么做? 砸了手机,跟老婆孩子好好过日子,本篇文章到此结束! 我们强行分析一波,假设存 ...

  8. 一个U盘走天下,装机大神撩妹的不二之选

    如果妹子叫你帮忙重装电脑,你不会怎么办?这么强劲的技不能不学啊! 首先要准备好随身工具,那就是制作一个快启动U盘启动盘 制作工具准备: 1.快启动U盘启动盘制作工具 2.大于32G的超大容量的U盘一个 ...

  9. 用计算机弹歌夜空中最亮的星,计算机弹《夜空中最亮的星》 网友:学会了去撩妹...

    原标题:计算机弹<夜空中最亮的星> 网友:学会了去撩妹 亿智蘑菇消息,人类对于音乐的执着是不会停止的,从喝水的瓶子,到我们吃饭的碗,然后是我们使用的桌子,只要能发生的物体都能被牛人变成优美 ...

最新文章

  1. Amazing Slide(图片轮播制作工具)中文版
  2. beego之context新老版本使用
  3. float与double类型区别比较
  4. 一个SAP UI5 TreeTable控件的错误分析
  5. QML笔记-JavaScript在QML中的使用(直接调用和间接调用)
  6. Python第二天(字典)
  7. Python 之面向对象 继承
  8. 2022中兴捧月算法挑战赛(RAW图像去噪)——初赛到决赛总结与反思
  9. Java8:Effectively final
  10. Java串口通信读写串口导致程序崩溃问题
  11. 设计模式-设计原则-开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段...
  12. matlab输出pdf图片超出边框,matlab - 将Matlab Simulink模型保存为PDF,带有紧密的边界框 - 堆栈内存溢出...
  13. 豆瓣 9.3 的高分,牛逼的 Git!
  14. 学习牛津书的免费网站
  15. 有限状态自动机java实现_有限状态机FSM的几种简单实现
  16. poj1601 青蛙的约会 (扩展欧几里得)
  17. 进入qq空间显示服务器错误,解决QQ空间打开无响应或报错的方法
  18. 在Vue中Promise.all的使用
  19. Nx 介绍: 基于插件的单一代码库(Monorepo)构建系统
  20. Java获得查询数据、运行程序花费的时间

热门文章

  1. Prometheus核心概念:你是如何在项目中使用Summary类型的Metric的?
  2. 关于动态口令的验证登陆
  3. 玩bing提供的多种免费在线游戏打发时间(popcap出品)
  4. 数据库PostrageSQL-Ident 认证
  5. 数据结构极其拓展篇(三)——树及JAVA创建二叉树
  6. php 将十进制转换为二进制,php十进制转二进制不用函数
  7. python爬取妹子图片_利用爬虫爬取清纯妹子图片
  8. 怎么学习-如何去模仿学习?
  9. @Transient----------------springMVC
  10. 仙人掌之歌——系统设计(2)