实例解析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. cmake下cmake_c_flags,add_definitions

    cmake_c_flags用来设置编译选项 如 -g -wall(不展示警告) add_definitions 添加编译参数,比如add_definitions(-DDEBUG)将在gcc命令行添加D ...

  2. 配置ubuntu18.04

    关于Ubuntu18.04的配置: 首先在装好系统后需要配置VMware Tools,这个会在虚拟机退出全屏的时候给一个帮助链接,在帮助链接中有详细的教程. 教程链接:https://docs.vmw ...

  3. Linux下卸载mysql8.x版本

    一.停止MySQL [root@localhost /]# service mysqld stop 二.查看当前安装mysql情况,查找以前是否装有mysql [root@localhost /]# ...

  4. mysqlcheck(MyISAM表维护工具)

    mysqlheck [option] db_name [tables] -c --check(检查表) -r  --repair(修复表) -a  --analyze(分析表) -o  --optim ...

  5. Python Scrapy 爬虫框架实例

    之前有介绍 scrapy 的相关知识,但是没有介绍相关实例,在这里做个小例,供大家参考学习. 注:后续不强调python 版本,默认即为python3.x. 爬取目标 这里简单找一个图片网站,获取图片 ...

  6. BZOJ 3698: XWW的难题(有源汇上下界最大流)

    题面 XWW是个影响力很大的人,他有很多的追随者.这些追随者都想要加入XWW教成为XWW的教徒.但是这并不容易,需要通过XWW的考核. XWW给你出了这么一个难题:XWW给你一个N*N的正实数矩阵A, ...

  7. Oracle 修改SID --不建议修改

    1.登录数据库查看SID select instance_name,status from v$instance; 2.关闭数据库 shutdown immdiate; 3.修改/etc/oratab ...

  8. 二十三.Subversion基本操作、使用Subversion协同工作、制作nginx的RPM包

    1.Subversion基本操作 web1 1.1 安装Subversion服务器 ]# yum -y install subversion 1.1.1 创建版本库 ]# mkdir /var/svn ...

  9. [Luogu] 选学霸

    https://www.luogu.org/problemnew/show/P2170 并查集+DP #include <iostream> #include <cstring> ...

  10. P2734 游戏 A Game

    题目背景 有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该数字被去掉并累加到本玩家的得分中 ...