实例解析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 22 Python
Python 专题一 函数的基础知识
Mar 16 Python
从0开始的Python学习014面向对象编程(推荐)
Apr 02 Python
对Python生成器、装饰器、递归的使用详解
Jul 19 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
Aug 10 Python
深入学习python多线程与GIL
Aug 26 Python
用Python生成HTML表格的方法示例
Mar 06 Python
python如何编写win程序
Jun 08 Python
Python3爬虫关于识别点触点选验证码的实例讲解
Jul 30 Python
基于Python的图像阈值化分割(迭代法)
Nov 20 Python
Python 用__new__方法实现单例的操作
Dec 11 Python
Python借助with语句实现代码段只执行有限次
Mar 23 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
?繁体转换的class
2006/10/09 PHP
检查php文件中是否含有bom的函数
2012/05/31 PHP
Laravel定时任务的每秒执行代码
2019/10/22 PHP
给Function做的OOP扩展
2009/05/07 Javascript
js 设置选中行的样式的实现代码
2010/05/24 Javascript
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
跟我学习javascript的浮点数精度
2015/11/16 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
2017/03/07 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
javascript实现切割轮播效果
2019/11/28 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
Python with的用法
2014/08/22 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
python实现搜索文本文件内容脚本
2018/06/22 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
django框架单表操作之增删改实例分析
2019/12/16 Python
基于Python绘制个人足迹地图
2020/06/01 Python
jupyter notebook 写代码自动补全的实现
2020/11/02 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
2020/12/22 Python
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
介绍一下.net和Java的特点和区别
2012/09/26 面试题
副总经理岗位职责
2014/03/16 职场文书
《北京的春节》教学反思
2014/04/07 职场文书
推荐信格式要求
2014/05/09 职场文书
分公司总经理岗位职责
2014/07/30 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书
Oracle使用别名的好处
2022/04/19 Oracle
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技