实例解析Python设计模式编程之桥接模式的运用

这篇文章主要介绍了Python设计模式编程之桥接模式的运用,桥接模式主张把抽象部分与它的实现部分分离,需要的朋友可以参考下

我们先来看一个例子:

#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();

可以总结出类图是这样的:

所以,桥接模式的概念在于将系统抽象部分与它的实现部分分离,使它们可以独立地变化。

由于目标系统存在多个角度的分类,每一种分类都会有多种变化,那么就可以把多角度分离出来,让它们独立变化,减少它们之间的耦合。

下面我们再来看一个实例:

基本原理请参考相关书籍,这里直接给实例

假期旅游 从目的地角度可以分为 上海和大连,从方式角度可以分为跟团和独体

桥接模式把这两种分类连接起来可以进行选择。

类图:

# -*- coding: utf-8
-*-
#######################################################
#
# tour.py
# Python implementation of
the Class DaLian
# Generated by Enterprise
Architect
# Created
on:   11-十二月-2012 16:53:52
#
#######################################################
 
from__future__importdivision
from__future__importprint_function
from__future__importunicode_literals
fromfuture_builtinsimport*
   
 
classTravelForm(object):
  """This class defines the
interface for implementation classes.
  """
  def__init__(self, form="stay at
home"):
    self.form=form
    pass
 
  defGetForm(self):
    returnself.form
    pass
  pass
 
classGroup(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
 
classIndependent(TravelForm):
  """This class implements the
Implementor interface and defines its concrete
  implementation.
  """
  def__init__(self, form="by
myself"):
    super(Independent,self).__init__(form)
    pass
 
classDestination(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
 
  defGetInfo(self):
    #
imp->Operation();
    returnprint(self.info
" " self.form.GetForm())
    pass
 
  defSetForm(self, form):
    self.form=form
    pass
 
classDaLian(Destination):
  """This class extends the
interface defined by Abstraction.
  """
  def__init__(self, info="Go to
DaLian "):
    super(DaLian,self).__init__(info)
    pass
 
classShangHai(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设计模式编程之桥接模式的运用的更多相关文章

  1. 简介Python设计模式中的代理模式与模板方法模式编程

    简介Python设计模式中的代理模式与模板方法模式编程 这篇文章主要介绍了Python设计模式中的代理模式与模板方法模式编程,文中举了两个简单的代码片段来说明,需要的朋友可以参考下 代理模式 Prox ...

  2. python设计模式之责任链模式

    python设计模式之责任链模式 开发一个应用时,多数时候我们都能预先知道哪个方法能处理某个特定请求.然而,情况并非总是如此.例如,想想任意一种广播计算机网络,例如最早的以太网实现.在广播计算机网络中 ...

  3. python设计模式之享元模式

    python设计模式之享元模式 由于对象创建的开销,面向对象的系统可能会面临性能问题.性能问题通常在资源受限的嵌入式系统中出现,比如智能手机和平板电脑.大型复杂系统中也可能会出现同样的问题,因为要在其 ...

  4. Java设计模式之《桥接模式》及应用场景

    摘要: 原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6497919.html 这里摘抄一份他处的概念,你可以不必理会,先看下面得讲解与实例, ...

  5. python设计模式之常用创建模式总结(二)

    前言 设计模式的创建模式终极目标是如何使用最少量最少需要修改的代码,传递最少的参数,消耗系统最少的资源创建可用的类的实例对象. 系列文章 python设计模式之单例模式(一) python设计模式之常 ...

  6. IOS设计模式浅析之桥接模式(Bridge)

    引言 在项目开发中,我们会遇到这样的一种场景:某些类型由于自身的逻辑,往往具有两个或多个维度的变化,比如说大话设计模式书中所说的手机,它有两个变化的维度:一是手机的品牌,可能有三星.苹果等:二是手机上 ...

  7. python设计模式之修饰器模式

    python设计模式之修饰器模式 无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法. [ ] 如果合理,可以直接将功能添加到对象所属的类(例如,添加一个新的方法) [ ] 使用组合 ...

  8. java23种设计模式——七、桥接模式

    原文地址:https://www.cnblogs.com/chenssy/p/3317866.html 源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 j ...

  9. Python设计模式: 最佳的"策略"模式实践代码

    Python设计模式: 最佳的"策略"模式实践代码 今天抽空看了下流畅的python,发现里面介绍了不少python自带的库的使用实例,用起来非常的优雅. 平时用Python来写爬 ...

随机推荐

  1. JS创建SVG的问题

    在线编辑的一个东西,用的是js+svg,遇到了这样一个问题,就是说我监听页面的单击事件,然后记录下来鼠标单击的位置,给svg添加子标签,然后页面上展示出来 说的可能不大清楚,上代码吧 <!DOC ...

  2. 修改DEDE文章标题长度,解决DEDE文章标题显示不全

    在用dede调用列表标题出来的时候,会发现标题文字字数显示不完全,那是因为dede默认标题出来长度是30个字符,为了让标题显示完整,要做以下修改! 进入后台–系统–系统设置–系统基本参数–其他选项–文 ...

  3. MongoDB 如何保证 oplog 顺序?

    MongoDB 复制集里,主备节点间通过 oplog 来同步数据,Priamry 上写入数据时,会记录一条oplog,Secondary 从 Primary 节点拉取 oplog并重放,以保证最终存储 ...

  4. 十二.虚拟Web主机

    *********************** 修改apache默认的网页文件存放位置 ]# mkdir /var/www/myweb ]# echo "I am MyWeb" & ...

  5. 为什么final类型map和list内容可以修改

    URL地址:https://blog.csdn.net/AlbertFly/article/details/76855367

  6. vue自定义弹框

    vue 全局自定义简单弹框 https://www.jianshu.com/p/1307329aa09e https://www.cnblogs.com/crazycode2/p/7907905.ht ...

  7. chrome的内存限制

    推荐阅读:https://www.cnblogs.com/chengxs/p/10919311.html chrome内存限制 存在限制 Chrome限制了所能使用的内存极限(64位为1.4GB,32 ...

  8. windows下安装php性能分析工具XHProf

    一.安装扩展 下载XHProf扩展:http://dev.freshsite.pl/php-extensions/xhprof.html 放入扩展文件:下载后解压出.dll文件,拷贝它到php的ext ...

  9. TCP HTTP SOCKET之间的有什么关系

    网络由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层, 三者从本质上来说没有可 ...

  10. Buuctf pwn1 详细wp

    目录 程序基本信息 程序溢出点 确定返回地址 编写exp脚本 成功getshell 程序基本信息 我们可以看到这是一个64程序,没有保护开启. 程序溢出点 gets函数可以读取无限字符,存在栈溢出. ...