实例解析Python设计模式编程之桥接模式的运用


Posted in Python onMarch 02, 2016

我们先来看一个例子:

#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();

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

实例解析Python设计模式编程之桥接模式的运用

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

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

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

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

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

类图:

实例解析Python设计模式编程之桥接模式的运用

# -*- 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()

运行结果

实例解析Python设计模式编程之桥接模式的运用

Python 相关文章推荐
python中的五种异常处理机制介绍
Sep 02 Python
python标准算法实现数组全排列的方法
Mar 17 Python
Python中处理字符串之islower()方法的使用简介
May 19 Python
Python如何获取系统iops示例代码
Sep 06 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
Jul 09 Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 Python
python3 selenium自动化 下拉框定位的例子
Aug 23 Python
python从PDF中提取数据的示例
Oct 30 Python
python tkinter实现连连看游戏
Nov 16 Python
Django视图类型总结
Feb 17 Python
Python实现提取PDF简历信息并存入Excel
Apr 02 Python
Python os和os.path模块详情
Apr 02 Python
Python随机生成带特殊字符的密码
Mar 02 #Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 #Python
Python打造出适合自己的定制化Eclipse IDE
Mar 02 #Python
设计模式中的原型模式在Python程序中的应用示例
Mar 02 #Python
深入解析Python设计模式编程中建造者模式的使用
Mar 02 #Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
Mar 02 #Python
实例讲解Python设计模式编程之工厂方法模式的使用
Mar 02 #Python
You might like
php adodb操作mysql数据库
2009/03/19 PHP
多个PHP中文字符串截取函数
2013/11/12 PHP
php表单提交实例讲解
2015/11/12 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
PHP7多线程搭建教程
2017/04/21 PHP
php使用json-schema模块实现json校验示例
2019/09/28 PHP
ExtJs中简单的登录界面制作方法
2010/08/19 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
JavaScript通过字符串调用函数的实现方法
2015/03/18 Javascript
微信JSSDK上传图片
2015/08/23 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
python之django母板页面的使用
2018/07/03 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
如何在python中实现线性回归
2020/08/10 Python
欧克利英国官网:Oakley英国
2019/08/24 全球购物
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
工程总经理工作职责
2013/12/09 职场文书
化学教师教学反思
2014/01/17 职场文书
工作自我评价怎么写
2014/01/29 职场文书
整顿机关作风心得体会
2014/09/10 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
教务处教学工作总结
2015/08/10 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
《窃读记》教学反思
2016/02/18 职场文书