实例解析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中的cookielib模拟登录网站
Apr 09 Python
MySQL中表的复制以及大型数据表的备份教程
Nov 25 Python
Python中is与==判断的区别
Mar 28 Python
python实现多进程代码示例
Oct 31 Python
python:接口间数据传递与调用方法
Dec 17 Python
在pycharm中使用git版本管理以及同步github的方法
Jan 16 Python
python 格式化输出百分号的方法
Jan 20 Python
python中pytest收集用例规则与运行指定用例详解
Jun 27 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
Jan 16 Python
Python语法垃圾回收机制原理解析
Mar 25 Python
scrapy实践之翻页爬取的实现
Jan 05 Python
pandas 按日期范围筛选数据的实现
Feb 20 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安全性漫谈
2012/06/28 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
破除一些网站复制、右键限制
2006/11/04 Javascript
javascript编程起步(第五课)
2007/02/27 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
python判断字符串是否包含子字符串的方法
2015/03/24 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
pandas去重复行并分类汇总的实现方法
2019/01/29 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
python for循环remove同一个list过程解析
2019/08/14 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
python 使用opencv 把视频分割成图片示例
2019/12/12 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
美国折扣网站:jClub
2017/08/07 全球购物
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
写自荐信有哪些不宜?
2013/10/17 职场文书
小学英语课后反思
2014/04/26 职场文书
应届大专生求职信
2014/06/26 职场文书
中学生旷课检讨书500字
2014/10/29 职场文书
团代会邀请函
2015/02/02 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android