python学习 使用类完成解耦-简单工厂模式/工厂方式模式

耦合和解耦的含义:

一、耦合

1、耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。

2、在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使类和构件之间的耦合最小。

3、分类:有软硬件之间的耦合,还有软件各模块之间的耦合。耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息通过接口。

二、解耦

1、解耦,字面意思就是解除耦合关系。

2、在软件工程中,降低耦合度即可以理解为解耦,模块间有依赖关系必然存在耦合,理论上的绝对零耦合是做不到的,但可以通过一些现有的方法将耦合度降至最低。

3、设计的核心思想:尽可能减少代码耦合,如果发现代码耦合,就要采取解耦技术。让数据模型,业务逻辑和视图显示三层之间彼此降低耦合,把关联依赖降到最低,而不至于牵一发而动全身。原则就是A功能的代码不要写在B的功能代码中,如果两者之间需要交互,可以通过接口,通过消息,甚至可以引入框架,但总之就是不要直接交叉写。

4、观察者模式:观察者模式存在的意义就是「解耦」,它使观察者和被观察者的逻辑不再搅在一起,而是彼此独立、互不依赖。比如网易新闻的夜间模式,当用户切换成夜间模式之后,被观察者会通知所有的观察者「设置改变了,大家快蒙上遮罩吧」。QQ消息推送来了之后,既要在通知栏上弹个推送,又要在桌面上标个小红点,也是观察者与被观察者的巧妙配合。

 

 1 class CarStore():
 2     def select_car(self,car_type):
 3         return select_Car(car_type)
 4     
 5 #上面部分一个人开发,下面一部分另一个人开发,为了避免交叉开发,需要使用解耦,一个人写完另一个人直接调用就好
 6 #使用函数完成解耦,但是尽量避免使用函数,会造成函数和类混乱
 7 def select_Car(car_type):
 8     if car_type=='桑塔纳':
 9         return Santana()
10     elif car_type=='大众':
11         return Dazhong()
12     elif car_type=='雪佛兰':
13         return Xuefulan()
14 
15 class Car():
16     def move(self):
17         print('车在移动')
18     def sing(self):
19         print('车在播放音乐')
20     def stop(self):
21         print('车在停止')
22 
23 class Santana(Car):
24     pass
25 
26 class Dazhong(Car):
27     pass
28 
29 class Xuefulan(Car):
30     pass
31 
32 car=CarStore()
33 car_type=car.select_car('桑塔纳')
34 car_type.move()
使用函数完成解耦,但是尽量避免使用函数,会造成函数和类混乱

 

 1 class CarStore():
 2     def __init__(self):
 3         self.factory=Factory()
 4 
 5     def select_car(self,car_type):
 6         return self.factory.select_Car(car_type)
 7 
 8 #上面部分一个人开发,下面一部分另一个人开发,为了避免交叉开发,需要使用解耦,一个人写完另一个人直接调用就好
 9 #使用类完成解耦-简单工厂模式
10 class Factory():
11     def select_Car(self,car_type):
12         if car_type=='桑塔纳':
13             return Santana()
14         elif car_type=='大众':
15             return Dazhong()
16         elif car_type=='雪佛兰':
17             return Xuefulan()
18 
19 class Car():
20     def move(self):
21         print('车在移动')
22     def sing(self):
23         print('车在播放音乐')
24     def stop(self):
25         print('车在停止')
26 
27 class Santana(Car):
28     pass
29 
30 class Dazhong(Car):
31     pass
32 
33 class Xuefulan(Car):
34     pass
35 
36 car=CarStore()
37 car_type=car.select_car('桑塔纳')
38 car_type.move()
39 
40 使用类完成解耦-简单工厂模式
使用类完成解耦-简单工厂模式

 

 1 #使用类完成解耦-工厂方式模式
 2 #即:定义好流程,在父类(基类)里面不去实现,而是在子类里面去实现
 3 class Store():
 4     def select_car(self,car_type):
 5         pass
 6 
 7     def order(self,car_type):
 8         return self.select_car(car_type)
 9 
10  #上面部分一个人开发,下面一部分另一个人开发,为了避免交叉开发,需要使用解耦,一个人写完另一个人直接调用就好
11 class Cheap_carStore(Store):
12     def select_car(self,car_type):
13         return Cheap_factory().select_Car_by_type(car_type)
14 
15 class Rich_carStore(Store):
16     def select_car(self,car_type):
17         return Rich_factory().select_Car_by_type(car_type)
18 
19 class Cheap_factory():
20     def select_Car_by_type(self,car_type):
21         if car_type=='桑塔纳':
22             return Santana()
23         elif car_type=='大众':
24             return Dazhong()
25         elif car_type=='雪佛兰':
26             return Xuefulan()
27 
28 class Rich_factory():
29     def select_Car_by_type(self,car_type):
30         if car_type=='宝马':
31             return BMW()
32         elif car_type=='奔驰':
33             return BENZ()
34 
35 class Car():
36     def move(self):
37         print('车在移动')
38     def sing(self):
39         print('车在播放音乐')
40     def stop(self):
41         print('车在停止')
42 
43 class Santana(Car):
44     pass
45 
46 class Dazhong(Car):
47     pass
48 
49 class Xuefulan(Car):
50     pass
51 
52 class BMW(Car):
53     pass
54 
55 class BENZ(Car):
56     pass
57 
58 car=Rich_carStore()
59 car_type=car.order('宝马')
60 car_type.move()
使用类完成解耦-工厂方式模式

 

posted on 2019-07-30 20:56  cherry_ning  阅读(637)  评论(0)    收藏  举报

导航