实例解析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 相关文章推荐
用yum安装MySQLdb模块的步骤方法
Dec 15 Python
Python设计模式之命令模式简单示例
Jan 10 Python
python实现寻找最长回文子序列的方法
Jun 02 Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 Python
Django+Xadmin构建项目的方法步骤
Mar 06 Python
Django web框架使用url path name详解
Apr 29 Python
python安装numpy和pandas的方法步骤
May 27 Python
PyQt5 QTable插入图片并动态更新的实例
Jun 18 Python
python opencv实现证件照换底功能
Aug 19 Python
Python实现socket非阻塞通讯功能示例
Nov 06 Python
django admin后管定制-显示字段的实例
Mar 11 Python
Python matplotlib绘制雷达图
Apr 13 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编写的导航条程序
2006/10/09 PHP
php获得网站访问统计信息类Compete API用法实例
2015/04/02 PHP
php冒泡排序与快速排序实例详解
2015/12/07 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
javascript 学习之旅 (1)
2009/02/05 Javascript
StringTemplate遇见jQuery冲突的解决方法
2011/09/22 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
JavaScript实现99乘法表及隔行变色实例代码
2016/02/24 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
原生js二级联动效果
2017/06/20 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
解决vue路由后界面没有变化,但是链接有的问题
2018/09/01 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
python中的对象拷贝示例 python引用传递
2014/01/23 Python
简单实现python数独游戏
2018/03/30 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
Python的历史与优缺点整理
2020/05/26 Python
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
写自荐信三大法宝
2014/01/24 职场文书
监察建议书范文
2014/03/12 职场文书
文化宣传方案
2014/03/13 职场文书
师德师风演讲稿
2014/05/05 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
2015年企业新年寄语
2014/12/08 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript
Navicat连接MySQL错误描述分析
2021/06/02 MySQL