实例解析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中针对函数处理的特殊方法
Mar 06 Python
Python定时执行之Timer用法示例
May 27 Python
在Django中同时使用多个配置文件的方法
Jul 22 Python
利用Python批量生成任意尺寸的图片
Aug 29 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
Mar 22 Python
Python闭包思想与用法浅析
Dec 27 Python
django2.0扩展用户字段示例
Feb 13 Python
Python如何基于selenium实现自动登录博客园
Dec 16 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
Jun 28 Python
python利用faker库批量生成测试数据
Oct 15 Python
正确的理解和使用Django信号(Signals)
Apr 14 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
May 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利用APC模块实现大文件上传进度条的方法
2015/10/29 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
2015/11/05 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
PHP实现将标点符号正则替换为空格的方法
2017/08/09 PHP
表单提交时自动复制内容到剪贴板的js代码
2007/03/16 Javascript
div移动 输入框不能输入的问题
2009/11/19 Javascript
基于Jquery的淡入淡出的特效基础练习
2010/12/13 Javascript
html组件不可输入(只读)同时任何组件都有效
2013/04/01 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
jquery实现不包含当前项的选择器实例
2015/06/25 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
vue-cli3.X快速创建项目的方法步骤
2019/11/14 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
jQuery实现日历效果
2020/09/11 jQuery
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
解析Python中的异常处理
2015/04/28 Python
Python实现破解猜数游戏算法示例
2017/09/25 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
Python 编程速成(推荐)
2019/04/15 Python
pip安装python库的方法总结
2019/08/02 Python
巴黎卡诗加拿大官网:Kérastase加拿大
2018/11/12 全球购物
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
学校办公室主任职责
2013/12/27 职场文书
基层党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
幼师个人总结范文
2015/02/28 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
python tkinter模块的简单使用
2021/04/07 Python