实例解析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网络编程之数据传输UDP实例分析
May 20 Python
浅谈python函数之作用域(python3.5)
Oct 27 Python
Python单元测试实例详解
May 25 Python
python简单贪吃蛇开发
Jan 28 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
Jul 04 Python
python字符串查找函数的用法详解
Jul 08 Python
使用python脚本自动创建pip.ini配置文件代码实例
Sep 20 Python
使用pytorch完成kaggle猫狗图像识别方式
Jan 10 Python
浅谈django 重载str 方法
May 19 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
May 26 Python
Keras设置以及获取权重的实现
Jun 19 Python
python 基于opencv去除图片阴影
Jan 26 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中对用户身份认证实现两种方法
2011/06/04 PHP
php+ajax导入大数据时产生的问题处理
2014/06/11 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
PHP中执行cmd命令的方法
2014/10/11 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
PHP实现字符串大小写转函数的功能实例
2019/02/06 PHP
js null undefined 空区别说明
2010/06/13 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
深入分析jQuery的ready函数是如何工作的(工作原理)
2015/12/17 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
Thinkjs3新手入门之添加一个新的页面
2017/12/06 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
Vue实现双向绑定的原理以及响应式数据的方法
2018/07/02 Javascript
原生JS实现汇率转换功能代码实例
2020/05/13 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
python爬取网易云音乐评论
2018/11/16 Python
python实现移动木板小游戏
2020/10/09 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
css3 实现圆形旋转倒计时
2018/02/24 HTML / CSS
CSS 3.0 结合video视频实现的创意开幕效果
2020/06/01 HTML / CSS
铭立家具面试题
2012/12/06 面试题
高中同学聚会邀请函
2014/01/11 职场文书
小学生打架检讨书
2014/01/26 职场文书
期末自我鉴定
2014/02/02 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL