gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章深入浅析python3 依赖倒置原则(示例代码)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

场景

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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这些类的公共性,把处理数据的方法通过接口抽象出来 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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依赖倒置原则内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://www.cnblogs.com/semishigure/p/14989089.html 。

最后此篇关于深入浅析python3 依赖倒置原则(示例代码)的文章就讲到这里了,如果你想了解更多关于深入浅析python3 依赖倒置原则(示例代码)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com