python的编程模式-实例解析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();

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

sg_trans.gif

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

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

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

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

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

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

类图:

sg_trans.gif

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

运行结果

sg_trans.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值