实例解析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中的localtime()方法使用详解
May 22 Python
python检测是文件还是目录的方法
Jul 03 Python
Python urls.py的三种配置写法实例详解
Apr 28 Python
Python 访问限制 private public的详细介绍
Oct 16 Python
对python产生随机的二维数组实例详解
Dec 13 Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 Python
python基于三阶贝塞尔曲线的数据平滑算法
Dec 27 Python
python实现简单的购物程序代码实例
Mar 03 Python
Python 将 QQ 好友头像生成祝福语的实现代码
May 03 Python
Python lambda表达式原理及用法解析
Aug 18 Python
Python tkinter之ComboBox(下拉框)的使用简介
Feb 05 Python
Python 快速验证代理IP是否有效的方法实现
Jul 15 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
简单的过滤字符串中的HTML标记
2006/12/25 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
PHP实现的限制IP投票程序IP来源分析
2016/05/04 PHP
CI框架常用函数封装实例
2016/11/21 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
给网站上的广告“加速”显示的方法
2007/04/08 Javascript
setTimeout 不断吐食CPU的问题分析
2009/04/01 Javascript
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
js浮点数精确计算(加、减、乘、除)
2013/12/26 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
layer实现弹出层自动调节位置
2019/09/05 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
详解Python中的循环语句的用法
2015/04/09 Python
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
python处理二进制数据的方法
2015/06/03 Python
请不要重复犯我在学习Python和Linux系统上的错误
2016/12/12 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
python监控进程状态,记录重启时间及进程号的实例
2019/07/15 Python
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
端午节活动总结
2014/08/26 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
水电工程师岗位职责
2015/02/13 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
为什么在foreach循环中JAVA集合不能添加或删除元素
2021/06/11 Java/Android
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电