实例解析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中关于中文编码问题的处理建议
Apr 08 Python
在python win系统下 打开TXT文件的实例
Apr 29 Python
用python简单实现mysql数据同步到ElasticSearch的教程
May 30 Python
PyCharm代码提示忽略大小写设置方法
Oct 28 Python
Python实现简单石头剪刀布游戏
Jan 20 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
Apr 11 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
Python编写一个验证码图片数据标注GUI程序附源码
Dec 09 Python
解决json中ensure_ascii=False的问题
Apr 03 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
Apr 07 Python
python通过新建环境安装tfx的问题
May 20 Python
python数字图像处理之对比度与亮度调整示例
Jun 28 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
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
2007/04/12 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
php删除左端与右端空格的方法
2014/11/29 PHP
PHP5多态性与动态绑定介绍
2015/04/03 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
php实现登陆模块功能示例
2016/10/20 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
摘自启点的main.js
2008/04/20 Javascript
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
js格式化金额可选是否带千分位以及保留精度
2014/01/28 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
基于JavaScript实现弹出框效果
2016/02/19 Javascript
select自定义小三角样式代码(实用总结)
2017/08/18 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
uni-app如何实现增量更新功能
2020/01/03 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
python读写csv文件方法详细总结
2019/07/05 Python
python3.6+django2.0+mysql搭建网站过程详解
2019/07/24 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
假日旅行社实习自我鉴定
2013/09/24 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
nginx搭建图片服务器的过程详解(root和alias的区别)
2021/03/31 Servers