实例解析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搭建Django应用程序步骤及版本冲突问题解决
Nov 19 Python
python采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
Nov 01 Python
Python中用psycopg2模块操作PostgreSQL方法
Nov 28 Python
Python程序退出方式小结
Dec 09 Python
Python代码缩进和测试模块示例详解
May 07 Python
详解分布式任务队列Celery使用说明
Nov 29 Python
Python实现二维曲线拟合的方法
Dec 29 Python
Django MEDIA的配置及用法详解
Jul 25 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
Oct 24 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
如何基于python把文字图片写入word文档
Jul 31 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
使用zend studio for eclipse不能激活代码提示功能的解决办法
2009/10/11 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
php实现简易计算器
2020/08/28 PHP
超酷的网页音乐播放器DewPlayer使用方法
2010/12/18 Javascript
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
深入领悟JavaScript中的面向对象
2013/11/18 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
使用Script元素发送JSONP请求的方法
2016/06/12 Javascript
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
详解JavaScript RegExp对象
2017/02/04 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
JS实现拼图游戏
2021/01/29 Javascript
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
Python简单I/O操作示例
2019/03/18 Python
python查看数据类型的方法
2019/10/12 Python
Java Spring项目国际化(i18n)详细方法与实例
2020/03/20 Python
关于python中remove的一些坑小结
2021/01/04 Python
尼克松手表官网:Nixon手表
2019/03/17 全球购物
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
实习期自我鉴定
2013/10/11 职场文书
网络信息管理员岗位职责
2014/01/05 职场文书
主持人婚宴答谢词
2014/01/28 职场文书
新书吧创业计划书
2014/01/31 职场文书
团日活动总结报告
2014/06/25 职场文书
2014年银行员工工作总结
2014/11/12 职场文书
西柏坡导游词
2015/02/05 职场文书
物业保洁员管理制度
2015/08/05 职场文书
python 爬取华为应用市场评论
2021/05/29 Python
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers