当前位置: 首页 > 科技观察

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

时间:2023-03-22 10:21:45 科技观察

大家好,今天给大家介绍一种新的设计模式——桥接模式,即桥接模式。比如桥接模式的主要作用就是解耦,将独立变化的量从整个逻辑中分离出来,从而节省我们的代码。我们以奶茶为例。对于奶茶来说,其原料往往比较简单,就是糖、水、茶叶、奶盖等。但生产过程往往大不相同。珍珠奶茶可能只是茶和牛奶混合珍珠,其他奶茶可能完全不同。如果我们想用一个程序来模拟制作奶茶的全过程,我们会发现如果为每一种奶茶都实现一个单独的类是非常麻烦的。因为不同的奶茶往往只是制作方法不同,但整体的原料和工艺可能是一样的。所以我们只是希望制作过程可以单独提取出来。这时候,我们就可以使用桥接模式。说白了,其实很简单,尤其是在Python中。代码实现这里先把奶茶类的主体逻辑放出来,大家一看就明白了。classBubbleTea:def__init__(self,ice,sugar,tea,cheese,making_api):self._ice=iceself._sugar=sugarself._tea=teaself._cheese=cheeself._making_api=making_apidefno_ice(self):self._ice=0defadditional_sugar(self):self._sugar+=5defadditional_cheese(self):self._cheese+=5defprepare(self):self._making_api.make(self._ice,self._sugar,self._tea,self._cheese)这里有冰、糖、茶和奶酪他们都是我们日常奶茶中添加的原料。对于奶茶的制作,我们经常会提出加芝士、去冰、加糖等要求。我们也把它们做成了单独的方法,这样也很容易理解。这里唯一需要注意的是,制作奶茶的过程,也就是prepare方法,实际上并没有在BubbleTea类中实现,而是通过making_api从外界传过来的。下面是我们桥接模式的应用。由于处理逻辑是从外界传来的,所以实际上是和奶茶类解耦的。我们可以随意定义这个API的实现方法,没有任何影响。.如果我们要在BubbleTea类内部实现奶茶,要么每种奶茶实现一个类,要么在里面做很多判断。无论哪种方式显然都不好,而且会导致大量代码Buildup和bloat。最后看一下making_api的实现和使用示例:classCheeseTeaAPI:defmake(self,ice,sugar,tea,cheese):print('cheesetea!cheese:{},bubbles:5,sugar:{},tea:{},ice:{}'.format(cheese,sugar,tea,ice))classBubbleTeaAPI:defmake(self,ice,sugar,tea,cheese):print('bubbletea!sugar:{},tea:{},ice:{}'.format(sugar,tea,ice))if__name__=='__main__':teas=[BubbleTea(0,5,3,0,BubbleTeaAPI()),BubbleTea(2,5,2,4,CheeseTeaAPI())]forteainteas:tea.no_ice()tea.additional_sugar()tea.prepare()如果你还一头雾水,不妨看看代码细节,仔细想想。总体来说,桥接模式在Python中的实现还是比较简单的,至少比Java中的实现要简单的多。本文转载自微信公众号「TechFlow」,可通过以下二维码关注。转载请联系TechFlow公众号。