设计模式之桥接模式Bridge、State模式、Adapter模式、Mediator模式、Facade模式简介

继承关系要慎用,因为继承意味着高耦合,子类与父类之间的耦合度极高,而我们设计的时候强调的是高内聚,低耦合。

桥接模式(Bridge)是一种结构型设计模式。Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。

Bridge桥接模式一般用于当某个父类的子类多个维度,各个维度之间有耦合时,我们用桥接解决这个耦合,实现几个维度的排列组合。
1.桥接模式的优点

(1)实现了抽象和实现部分的分离
桥接模式分离了抽象部分和实现部分,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,分别定义接口,这有助于系统进行分层设计,从而产生更好的结构化系统。对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了。
(2)更好的可扩展性
由于桥接模式把抽象部分和实现部分分离了,从而分别定义接口,这就使得抽象部分和实现部分可以分别独立扩展,而不会相互影响,大大的提供了系统的可扩展性。
(3)可动态的切换实现
由于桥接模式实现了抽象和实现的分离,所以在实现桥接模式时,就可以实现动态的选择和使用具体的实现。
(4)实现细节对客户端透明,可以对用户隐藏实现细节。

2.桥接模式的缺点
(1)桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程。
(2)桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性。

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

在我们的例子中,对于Gift来说,有WarmGift和WildGift两种类型的礼物,还有另一种分类:Ring和Flower,那么由于Flower和Ring也分Wild和Warm类型的,所以耦合关系就出来了,那么我们使用聚合来解决这个问题。
在WarmGift和WildGift中直接指定礼物(Ring和Flower实现了GiftImpl的接口)
在这里插入图片描述
在这里插入图片描述

注意:JDBC-ODBC Bridge其实是一个Adapter(适配器)。
java Io中的是什么模式:Adapter模式。例如:InputStreamReader,一边是Input一边是Reader,用InputStreamReader进行连接。

例程模式:State Command Bridge
探讨模式:Facade模式(外观、门面模式)、decorator装饰器、Adapter、Mediator模式(中介者模式)

State模式:
一个类的动作是根据其内部状态的不同决定的。例如,Girl处于开心的时候,就会高兴地笑,生气的时候就会假笑。
在这里插入图片描述State设计模式优缺点:
优点:避免了为判断状态而产生的巨大的if或case语句,将对象行为交给状态类维护后,对上层程序而言,仅需要维护状态之间的转换规则。
缺点:会导致某些系统有过多的具体状态类。

Mediator中介者模式:
就是有一个类用来调停其他几个类之间或者几个对象的关系,是系统内部的模式。
例如你要追MM,但是七大姑八大姨都来询问,他们都有不同的意见,这时候就可以设置一个类专门处理他们之间的沟通,七大姑八大姨之间不需要进行沟通,mediator还起着仲裁者的作用。
Mediator模式的思路
不容易发生分散灾难。如果需求发生变更,由于其他地方并没有控制控件的启用/禁用的逻辑处理,因此只要调试该方法就能很容易地找出Bug的原因。
通常情况下,面向对象编程可以帮助我们分散处理,避免处理过于集中,也就是说可以“分而治之”。但是如果只是将应当分散的处理分散在各个类中,但是没有将应当集中的处理集中起来,那么这些分散的类最终只会导致灾难。

Facade模式:
有点像Springboot中的Controller类,将多次的调用改为调用一次对facade的调用,facade类就是控制整个系统组件与外界交互的门面。
就是对外的门面,该门面可以是一个类,通过这个类处理系统内部的各个模块之间的关系。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值