实例解析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. Mongoose初使用总结

    连接mongoose mongoose连接数据库有两种方式 第一种: 'use strict'; const mongoose = require('mongoose'); mongoose.conn ...

  2. 7月新的开始 - Axure学习06 - 母版的使用

    母版的使用 主导航.底部.在很多页面上都是一样的: 如果在每一个页面都写一次的化.话.是非常浪费时间的,为了方便.可以使用母版: 母版可以帮助我们将一些元素重复利用,既可以保证页面的统一性.还可以节省 ...

  3. 28-SQLServer带见证服务器的镜像搭建

    一.注意点 1.数据库的模式要是完整模式. 2.要对数据库完整备份和事务日志备份,分别还原到镜像库上,使用NORECOVERY模式. 3.镜像数据库是不允许删除和操作,即便查看属性也不行. 4.先删除 ...

  4. Java实习生面试题分享

    1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别. Java语言提供了八种基本类型: 六种数字类型(四个整数型,两个浮点型) 字节型byte 8位 短整型short 16位 ...

  5. native关键字

    1.native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中. 可以将native方法比作Java程序同C程序的接口

  6. 使用其他服务器引入JS文件

    使用其他服务器引入JS文件,1,减轻服务器压力2,速度快3,可以缓存 cdnjs库,更新比较快https://cdnjs.com/ cdn库 引入JS文件如:jquerybootcdn : https ...

  7. C#第三章

    一.ImageList:存储图像集合 Images 存储的所有图像 ImageSize 图像的大小 ColorDepth 颜色数 TransparentColor 被视为透明的颜色 先设置ColorD ...

  8. Oracle 全部后台进程简介

    LGWR,DBWR,SMON,PMON,CKPT是必需的五个后台进程.ARCH是最重要的可选后台进程.最重要的六个进程:1.LGWR重做日志写进程,LOG write 负责将重做日志缓冲区记录顺序写入 ...

  9. 056_统计/etc/passwd 中 root 出现的次数

    #!/bin/bash#每读取一行文件内容,即从第 1 列循环到最后 1 列,依次判断是否包含 root 关键词,如果包含则 x++awk -F: '{i=1;while(i<=NF){if($ ...

  10. luogu 3702 [SDOI2017]序列计数 矩阵乘法+容斥

    现在看来这道题真的不难啊~ 正着求不好求,那就反着求:答案=总-全不是质数 这里有一个细节要特判:1不是质数,所以在算全不是质数的时候要特判1 code: #include <bits/stdc ...