• 实例解析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()

    运行结果


  • 相关阅读:
    SpringBoot2.0 整合 Dubbo框架 ,实现RPC服务远程调用
    Spark家族:Win10系统下搭建Scala开发环境
    Linux系统:centos7下搭建Rocketmq4.3中间件,配置监控台
    Linux系统:Centos7环境搭建Redis单台和哨兵集群环境
    Linux系统:常用Linux系统管理命令总结
    Linux系统:centos7下安装Jdk8、Tomcat8、MySQL5.7环境
    Linux系统:centos7下搭建ZooKeeper3.4中间件,常用命令总结
    SpringBoot2.0 整合 Redis集群 ,实现消息队列场景
    SpringBoot2.0 基础案例(17):自定义启动页,项目打包和指定运行环境
    SpringBoot2.0 基础案例(16):配置Actuator组件,实现系统监控
  • 原文地址:https://www.cnblogs.com/amengduo/p/9586282.html
Copyright © 2020-2023  润新知