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

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

[[374350]]

 大家好,今天给大家介绍一种新的设计模式——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
相关推荐

2022-05-29 22:55:00

适配器设计模式

2022-08-15 19:49:57

Consul架构注册中心

2019-08-14 10:20:32

算法数组链表

2023-05-12 09:08:48

TypeScript工具类型

2020-09-21 08:33:12

线程池调度Thread Pool

2020-04-15 08:33:43

Netty网络通信

2018-09-28 14:28:28

MySQL存储过程

2021-07-15 09:55:47

systemdLinux文件

2020-03-27 09:06:54

选择排序算法冒泡排序

2023-03-03 08:12:07

设计模式语言

2021-05-14 07:11:49

方法调用类加载

2021-12-30 09:10:28

游戏开发开发技术热点

2019-01-15 09:55:24

RAID磁盘阵列数据存储

2020-05-09 14:40:29

UI设计开发

2020-10-16 18:41:43

command设计模式代码

2015-11-12 09:32:03

Javascript设计模式

2023-02-28 09:10:28

设计模式解耦数据

2022-01-14 09:22:22

设计模式桥接

2020-10-28 11:56:47

桥接模式

2015-07-21 13:07:14

Reactjs教程
点赞
收藏

51CTO技术栈公众号