实例解析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. P1363 幻象迷宫[搜索]

    题目描述 (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊-- LHX:momo...我们一定能走出去的! WD:嗯,+U+U ...

  2. python装饰器,迭代器,生成器,协程

    python装饰器[1] 首先先明白以下两点 #嵌套函数 def out1(): def inner1(): print(1234) inner1()#当没有加入inner时out()不会打印输出12 ...

  3. vue中读取excel中数据

    安装xlsx npm install xlsx --save-dev 安装好后在需要的页面 引入插件 import xlsx from 'xlsx' 调用 $('#uploadFile').chang ...

  4. Linux环境下安装mysql5.6(二进制包不是rpm格式)

    一.准备: 1.CentOS release 6.8 2.mysql-5.6.31-linux-glibc2.5-x86_64.tar.gz 3.Linux下MySQL5.6与MySQL5.7安装方法 ...

  5. HDU-5446-UnknownTreasure(组合数,中国剩余定理)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=5446 题意: On the way to the next secret treasure hiding ...

  6. h5css样式

    兼容性前缀: 谷歌:webkit 火狐:moz ie:ms 欧鹏:o选择器: 属性选择器: * = 包含 {href * = 'www'} ^ = 以什么开头 $ = 以什么结尾 伪类选择器: 第一个 ...

  7. 004_硬件基础电路_AD各层含义

  8. 8.1.T1

    string 题面什么的 抱歉,被我咕咕咕了 考场思路: sort大法好 n2log2n过 40% 令人着实兴奋 正解: 线段树+桶 利用只有26个字母的优势 好吧,26个字母,只怪我没想到 代码: ...

  9. qt5.10 for android 使用webview时qml 与html 中js的相互访问

    webview 本身没有qwebchannel 的接口,只能通过WebSocketServer 间接的访问. 参考 https://stackoverflow.com/questions/513131 ...

  10. C++11多线程std::thread创建方式

    //#include <cstdlib> //#include <cstdio> //#include <cstring> #include <string& ...