• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    深入浅析python3 依赖倒置原则(示例代码)

    场景

    针对园区停车信息,需要对各个公司提供的停车数据进行整合并录入自家公司的大数据平台

    数据的录入无外乎就是对数据的增删改查

    下面上一个常规的写法(未符合依赖倒置),整合来自 长安和丰田 的停车数据

    class Changan(object):
        def __init__(self):
            self.type = 'changan'
    
        def ca_add(self):
            print('%s 新增' % self.type)
    
        def ca_del(self):
            print('%s 删除' % self.type)
    
        def ca_modify(self):
            print('%s 修改' % self.type)
            
        def ca_get(self):
            print('%s 查询' % self.type)
    
    
    class Toyota(object):
        def __init__(self):
            self.type = 'fengtian'
    
        def tyt_add(self):
            print('%s 新增' % self.type)
    
        def tyt_del(self):
            print('%s 删除' % self.type)
    
        def tyt_modify(self):
            print('%s 修改' % self.type)
    
        def tyt_get(self):
            print('%s 查询' % self.type)
    
    class Data(object):
    
        def __init__(self, car):
            self.car = car
    
        def data_add(self):
            if self.car.type == 'changan':
                self.car.ca_add()
            else:
                self.car.tyt_add()
    
        def data_del(self):
            if self.car.type == 'changan':
                self.car.ca_del()
            else:
                self.car.tyt_del()
    
        def data_mofify(self):
            if self.car.type == 'changan':
                self.car.ca_modify()
            else:
                self.car.tyt_modify()
    
        def data_get(self):
            if self.car.type == 'changan':
                self.car.ca_get()
            else:
                self.car.tyt_get()
    
    if __name__ == '__main__':
        ca = Changan()
        tyt = Toyota()
        autosystem = Data(ca)
        autosystem.data_add()
        autosystem.data_del()
        autosystem.data_modify()
        autosystem.data_get()
        autosystem.car = tyt
        print('*' * 50)
        autosystem.data_add()
        autosystem.data_del()
        autosystem.data_modify()
        autosystem.data_get()

    运行的结果如下

    changan 新增
    changan 删除
    changan 修改
    changan 查询
    **************************************************
    fengtian 新增
    fengtian 删除
    fengtian 修改
    fengtian 查询

    可以看到最后的Data类是一个简单工厂,通过面向流程的方式对数据进行增删改查,上层的Data类永远都要依赖下层的Changan类和Toyota类,假设未来Changan类和Toyota类因为需求变更导致实现方式变了,那么Data类也会跟着改,或者未来又来一家新的厂商铃木Suzuki,那么在Data又要多写很多if else。这样的改动对于程序员来说是致命的,每一次变动需要改动的地方都很多,问题油然而生。

    如何解决

    遵循依赖倒置原则,根据

    "程序要依赖于抽象接口,不要依赖于具体实现。"

    通过changan、toyota这些类的公共性,把处理数据的方法通过接口抽象出来

    import abc
    
    class DataProcessing(metaclass=abc.ABCMeta):
        """
        抽象类
        抽象新增改查
        """
        @abc.abstractmethod
        def data_add(self, *args, **kwargs):
            pass
    
        @abc.abstractmethod
        def data_del(self, *args, **kwargs):
            pass
    
        @abc.abstractmethod
        def data_modify(self, *args, **kwargs):
            pass
    
        @abc.abstractmethod
        def data_get(self, *args, **kwargs):
            pass
    
    class Changan(DataProcessing):
        def __init__(self):
            self.type = 'changan'
    
        def data_add(self):
            print('%s 新增' % self.type)
    
        def data_del(self):
            print('%s 删除' % self.type)
    
        def data_modify(self):
            print('%s 修改' % self.type)
            
        def data_get(self):
            print('%s 查询' % self.type)
    
    class Toyota(DataProcessing):
        def __init__(self):
            self.type = 'fengtian'
    
        def data_add(self):
            print('%s 新增' % self.type)
    
        def data_del(self):
            print('%s 删除' % self.type)
    
        def data_modify(self):
            print('%s 修改' % self.type)
    
        def data_get(self):
            print('%s 查询' % self.type)
    
    class Data(object):
    
        def __init__(self, car):
            self.car = car
    
        def data_add(self):
            self.car.data_add()
    
        def data_del(self):
            self.car.data_del()
    
        def data_modify(self):
            self.car.data_modify()
    
        def data_get(self):
            self.car.data_get()
    
    if __name__ == '__main__':
        ca = Changan()
        tyt = Toyota()
        autosystem = Data(ca)
        autosystem.data_add()
        autosystem.data_del()
        autosystem.data_modify()
        autosystem.data_get()
        autosystem.car = tyt
        print('*' * 50)
        autosystem.data_add()
        autosystem.data_del()
        autosystem.data_modify()
        autosystem.data_get()

    运行后结果依然为

    changan 新增
    changan 删除
    changan 修改
    changan 查询
    **************************************************
    fengtian 新增
    fengtian 删除
    fengtian 修改
    fengtian 查询

    以上可看出,增删改查已经抽象成DataProcessing里面的方法,以后不管Changan类和Toyota类怎么变动,或者需要新增一个Suzuki类什么的,上层的Data类都不用改变,if name == 'main' 后客户端的调用也不需要怎么改动,代码层次也更清晰,便于后续的扩展。

    到此这篇关于python3 依赖倒置原则示例的文章就介绍到这了,更多相关python依赖倒置原则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • Python安装依赖(包)模块方法详解
    • python离线安装外部依赖包的实现
    • 将python依赖包打包成window下可执行文件bat方式
    • Python依赖包整体迁移方法详解
    • 查看Python依赖包及其版本号信息的方法
    • 利用anaconda作为python的依赖库管理方法
    • python通过txt文件批量安装依赖包的实现步骤
    • Python一键安装全部依赖包的方法
    上一篇:Python中Selenium对Cookie的操作方法
    下一篇:python实现MD5进行文件去重的示例代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    深入浅析python3 依赖倒置原则(示例代码) 深入,浅析,python3,依赖,倒置,