Java23种设计模式——8.结构型模式之桥接模式

Java中除去有设计原则之外,还有23中设计模式。

这些模式都是前辈们一点一点积累下来,一直在改进,一直在优化的,而这些设计模式可以解决一些特定的问题。

并且在这些模式中,可以说是将语言的使用体现的淋漓尽致。

那我们今天要学习  结构型模式  中的  桥接模式  !

桥接模式

废话不多说,百度百科走一波

桥接模式是将抽象和实现进行分离,可以让他们独立的进行变化。还有就是他后面的一句,这个还可以被称为接口模式。

说到接口,我们不得不说,这个可以说是一个Java编程中一个重要的思想,我们学习过设计原则的都知道,Java编程最主要的就是面向接口编程。

那这个桥接模式是想解决啥问题呢?这里我说两个例子。

就拿穿衣服说好了。我们的衣服分为上衣、下装,裙子啊啥的,每一个上衣都有不同的颜色款式,如果我们今天出门选择搭配的话,那这个挑选起来就太多了。当你每增加一件衣服,你这个选择起来就越复杂,因为上衣个数 * 下装个数 = 搭配种类个数。

再比如说画画,我们可以画方块,画圆圈,三角啥的,当你使用很多种颜色的笔再去画的话,这个就和上面的选衣服一样了。你可以画红色的圆圈、绿色的圆圈、白色的方块、紫色的三角,这个就令人头大了,这要是写成代码,你得疯了,每有一个新的颜色,或者有一个新的形状,你这个就得多写一大堆的代码。

这里可能有人说了,用继承啊、圆圈、方块三角继承形状。红黄蓝绿继承颜色。这里我要说,如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难。

而我们今天要说的这个桥接模式就能够帮助我们解决上面的问题。

桥接模式的定义与特点

特点其实百度百科已经说了,就是将抽象和实现进行分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

优点:优点其实上面说了,降低耦合度、抽象和实现分离。

缺点:缺点是,由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,这增加了系统的理解与设计难度。

桥接模式的结构与实现

桥接模式主要包含了几个角色。

1. 抽象化角色:定义抽象类,并包含一个对实现化对象的引用。

2. 扩展抽象化角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。

3. 实现化角色:定义实现化角色的接口,供扩展抽象化角色调用。

4. 具体实现化角色:给出实现化角色接口的具体实现。

可能看完这些个角色大家有点懵。不要慌,我们慢慢来操作,通过操作,来认识这些个东西。

我们先梳理一下业务,就拿电脑来说,电脑这个东西有很多配置,比如说显卡,CPU,内存等等,这些东西有型号啊,性能乱七八糟等区别,通过不同的组合配置,我们有很多种选择,这时候我们来使用一下桥接模式来实现一下电脑的配置。

但是啊,这个东西太多了,我们就选择两个,大家可以到时候举一反三,自己去尝试啊。我们选择显卡和CPU。

第一步

我们先来定义一个接口,这个接口就是实现化角色,大家可以看定义,这个是提供给 “扩展抽象化角色” 它用的。

这个接口我们是主要来获取CPU的。

第二步

我们再来搞一个具体实现化角色。让这个具体实现化角色去实现刚刚我们定义的接口。

我们这里就输出一下这个CPU的牌子啊,当然了,除去这个英特尔公司之外,还有其他的厂商也在做CPU,这里我们再来一个。

AMD 公司的CPU也很强劲啊(有兴趣的同学可以去看看这两家公司的CPU)

第三步,重点来了!!!!

我们现在来创建  “抽象化角色” 

这个角色呢,是指的电脑这个玩意,我们来看一下怎么去定义。

我们得需要在这个抽象方法中获取到cpu,但是还不行,我们还得要有显卡,这里我们显卡是这么去做的

这样的,我们定义一个这个抽象方法,让具体的子类去实现这个方法。

第四步,还是重点啊!

我们要定义  “扩展抽象化角色” 这个了,这个角色,去实现我们刚刚定义的这个抽象方法。我们来看一下

同样,我们定义两个,一个是这个NVIDIA公司的显卡,还有一个是ATI公司的显卡(现在ATI已经被AMD公司收购了)

这里,我们返回一下,我们返回它这个公司的名字 和 CPU。

相同的,ATI也是一样的

当然,注意一下,这个getCpu是调用的Implementor这个接口的方法,别搞混了。。

好,有了这些之后,我们就可以开始测试了。

我们弄个Test类来进行测试。

测试

怎么测试呢,我们先把这两个CPU都给它创建好

有了CPU之后呢,我们再来去实例化电脑。

这里我们先实例化一个N卡的电脑。

然后运行一下。

OK的啊,没问题,大家可以自己尝试一下别的。

当然,到这里是没有完的啊。现在我们说多了一个CPU的牌子,IBM,我们来看一下怎么去做。

仅需几步,先弄一个类,去实现CPU的内个接口。

然后,直接实例化电脑,直接去弄个N卡的IBM公司提供的CPU的电脑。

是不是很方便。

相比以前来回继承,这样做能让你的代码质量翻一番。

OK,大家好好理解一下。多去思考一下这套关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

他 他 = new 他()

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值