视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
实例解析Python设计模式编程之桥接模式的运用
2020-11-27 14:35:29 责编:小采
文档
 我们先来看一个例子:

#encoding=utf-8 
# 
#by panda 
#桥接模式 
 
def printInfo(info): 
 print unicode(info, 'utf-8').encode('gbk') 
 
#抽象类:手机品牌 
class HandsetBrand(): 
 soft = None 
 def SetHandsetSoft(self, soft): 
 self.soft = soft 
 
 def Run(self): 
 pass 
 
#具体抽象类:手机品牌1 
class HandsetBrand1(HandsetBrand): 
 def Run(self): 
 printInfo('手机品牌1:') 
 self.soft.Run() 
 
#具体抽象类:手机品牌2 
class HandsetBrand2(HandsetBrand): 
 def Run(self): 
 printInfo('手机品牌2:') 
 self.soft.Run() 
 
 
#功能类:手机软件 
class HandsetSoft(): 
 def Run(self): 
 pass 
 
#具体功能类:游戏 
class HandsetGame(HandsetSoft): 
 def Run(self): 
 printInfo('运行手机游戏') 
 
#具体功能类:通讯录 
class HandsetAddressList(HandsetSoft): 
 def Run(self): 
 printInfo('运行手机通信录') 
 
def clientUI(): 
 h1 = HandsetBrand1() 
 h1.SetHandsetSoft(HandsetAddressList()) 
 h1.Run() 
 h1.SetHandsetSoft(HandsetGame()) 
 h1.Run() 
 
 h2 = HandsetBrand2() 
 h2.SetHandsetSoft(HandsetAddressList()) 
 h2.Run() 
 h2.SetHandsetSoft(HandsetGame()) 
 h2.Run() 
 return 
 
if __name__ == '__main__': 
 clientUI();

可以总结出类图是这样的:

所以,桥接模式的概念在于将系统抽象部分与它的实现部分分离,使它们可以地变化。
由于目标系统存在多个角度的分类,每一种分类都会有多种变化,那么就可以把多角度分离出来,让它们变化,减少它们之间的耦合。

下面我们再来看一个实例:

基本原理请参考相关书籍,这里直接给实例

假期旅游 从目的地角度可以分为 上海和大连,从方式角度可以分为跟团和独体

桥接模式把这两种分类连接起来可以进行选择。

类图:

# -*- coding: utf-8 -*-
#######################################################
# 
# tour.py
# Python implementation of the Class DaLian
# Generated by Enterprise Architect
# Created on: 11-十二月-2012 16:53:52
# 
#######################################################

from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
from future_builtins import *
 

class TravelForm(object):
 """This class defines the interface for implementation classes.
 """
 def __init__(self, form="stay at home"):
 self.form=form
 pass

 def GetForm(self):
 return self.form
 pass
 pass

class Group(TravelForm):
 """This class implements the Implementor interface and defines its concrete
 implementation.
 """
 def __init__(self, form="by group"):
 super(Group,self).__init__(form) 
 pass
 pass

class Independent(TravelForm):
 """This class implements the Implementor interface and defines its concrete
 implementation.
 """
 def __init__(self, form="by myself"):
 super(Independent,self).__init__(form)
 pass

class Destination(object):
 """This class (a) defines the abstraction's interface, and (b) maintains a
 reference to an object of type Implementor.
 """
 m_TravelForm= TravelForm()

 def __init__(self, info):
 self.info=info
 pass

 def GetInfo(self):
 # imp->Operation();
 return print(self.info + " " +self.form.GetForm())
 pass

 def SetForm(self, form):
 self.form=form
 pass

class DaLian(Destination):
 """This class extends the interface defined by Abstraction.
 """
 def __init__(self, info="Go to DaLian "):
 super(DaLian,self).__init__(info)
 pass

class ShangHai(Destination):
 """This class extends the interface defined by Abstraction.
 """
 def __init__(self, info="Go to ShangHai"):
 super(ShangHai,self).__init__(info)
 pass
#客户端
if(__name__=="__main__"):
 
 destination=ShangHai()
 destination.SetForm(Group())
 destination.GetInfo()
 
 
 destination=DaLian()
 destination.SetForm(Independent())
 destination.GetInfo()

运行结果

下载本文
显示全文
专题