zoukankan      html  css  js  c++  java
  • 实例解析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();

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


    所以,桥接模式的概念在于将系统抽象部分与它的实现部分分离,使它们可以独立地变化。
    由于目标系统存在多个角度的分类,每一种分类都会有多种变化,那么就可以把多角度分离出来,让它们独立变化,减少它们之间的耦合。

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

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

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

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

    类图:



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

    运行结果


  • 相关阅读:
    管理经济学
    第五章 文件管理
    内存管理
    第三章 进程调度与死锁
    操作系统概论 第二章
    计算机系统
    企业与政府信息资源管理
    信息资源管理的标准与法规
    议论文
    如何从大量的 url 中找出相同的 url
  • 原文地址:https://www.cnblogs.com/amengduo/p/9586281.html
Copyright © 2011-2022 走看看