文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

设计模式,一看就懂的桥模式,解耦可变量与主体逻辑

2024-12-03 13:31

关注

 大家好,今天给大家介绍一种新的设计模式——bridge模式,即桥模式。

举个例子

桥模式的主要功能也是解耦,把会独立变化的量从整个逻辑中抽离出来,从而节省我们的代码量。我们用奶茶来举个简单的例子。

对于奶茶而言,它的原料往往比较简单,就是糖、水、茶以及奶盖等等。但是制作过程往往大相径庭,珍珠奶茶可能就只是把茶和奶混合加上珍珠,其他的奶茶可能完全不同。

假如我们希望用程序来模拟奶茶制作的整个过程,我们会发现如果我们对每一种奶茶都单独实现一个类是非常麻烦的。因为不同奶茶往往只是制作手法有差别,但是整体的原料以及流程可能都是一样的。所以我们只希望可以单独抽离出制作过程即可,这个时候我们就可以使用桥接模式,说穿了其实非常简单,尤其是在Python当中。

代码实现

这里我们先放出奶茶这个类主体的逻辑,大家估计一看就明白了。

  1. class BubbleTea: 
  2.     def __init__(self, ice, sugar, tea, cheese, making_api): 
  3.         self._ice = ice 
  4.         self._sugar = sugar 
  5.         self._tea = tea 
  6.         self._cheese = cheese 
  7.         self._making_api = making_api 
  8.  
  9.     def no_ice(self): 
  10.         self._ice = 0 
  11.  
  12.     def additional_sugar(self): 
  13.         self._sugar += 5 
  14.  
  15.     def additional_cheese(self): 
  16.         self._cheese += 5 
  17.  
  18.     def prepare(self): 
  19.         self._making_api.make(self._ice, self._sugar, self._tea, self._cheese) 

这里的ice、sugar、tea和cheese都是我们日常奶茶当中都会添加的原料,对于奶茶的制作我们往往也会提一些加芝士、去冰以及加糖这些要求,我们也把它们做成了单独的方法,这些也都很好理解。

这里唯一有些需要注意的就是对于奶茶的制作过程,也就是prepare这个方法,其实并不是在BubbleTea这个类当中实现的,而是通过making_api从外界传来的。这里也就是我们bridge模式的应用了,既然处理逻辑是外界传来的,那么它其实就和奶茶这个类解耦了,我们可以在外面自己随意定义这个api的实现方式,也不会有任何影响。如果我们要在BubbleTea这个类内部来实现奶茶的话,要么我们对每一种奶茶实现一个类,要么我们在其中做大量的判断,无论是哪一种情况显然都不太好,会导致代码大量的堆积和臃肿。

最后我们看一下making_api的实现,以及使用示例:

  1. class CheeseTeaAPI: 
  2.     def make(self, ice, sugar, tea, cheese): 
  3.         print('cheese tea! cheese: {}, bubbles: 5, sugar: {}, tea: {}, ice: {}'.format(cheese, sugar, tea, ice)) 
  4.  
  5.  
  6. class BubbleTeaAPI: 
  7.     def make(self, ice, sugar, tea, cheese): 
  8.         print('bubble tea! sugar: {}, tea: {}, ice: {}'.format(sugar, tea, ice)) 
  9.          
  10.          
  11. if __name__ == '__main__'
  12.  
  13.     teas = [BubbleTea(0, 5, 3, 0, BubbleTeaAPI()), BubbleTea(2, 5, 2, 4, CheeseTeaAPI())] 
  14.  
  15.     for tea in teas: 
  16.         tea.no_ice() 
  17.         tea.additional_sugar() 
  18.         tea.prepare() 

如果大家还有困惑的话,不妨再看下代码细节,仔细思考一下。整体来说,bridge模式在Python当中的实现还是比较简单的,最起码比在Java中的实现简单多了。

本文转载自微信公众号「TechFlow」,可以通过以下二维码关注。转载本文请联系TechFlow公众号。

 

来源:TechFlow内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯