所谓设计模式

个人观点:对于 python 来说,它本来就是一个很灵活的语言,要想实现相应的功能,并不一定非得用这些设计模式的概念。
而且每个设计模式都有各自的使用场景和优缺点,正确理解,领悟各自的适用场景才是最重要的。

创建模式

简单工厂模式

对于一个方法,需要在多种情景下调用。如发送消息:

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
class SendModule:
"""
发生消息的原型
"""
def send(self):
pass

class EMail(SendModule):
"""
具体的应用场景1
"""
def send(self):
print("通过邮件发送")

class SMS(SendModule):
"""
具体的应用场景2
"""
def send(self):
print("通过短信发送")

class SendFactory:
"""
这里就是简单工厂的部分
在这里判断用哪个情景来发送消息
"""
def send(self, type):
if type == 1:
EMail().send()
else:
SMS().send()

更实际的,直接将SendFactory用方法来封装。
这里只返回哪个类对象,send方法让具体的业务调用。

1
2
3
4
5
6
7
8
9
10
def sender_factory(type):
"""
这里就是简单工厂的部分
在这里判断用哪个情景来发送消息
"""
def send(self):
if type == 1:
return EMail()
else:
return SMS()

工厂模式

不需要用 sender_factory 来选择用哪个情景,直接根据具体的业务场景来调用 EMail().send() / SMS().send()。
免去了改 sender_factory 逻辑的烦恼。
其实简单工厂和工厂,主要的核心还是在于有一个相同的方法send,分别用于多种类。

抽象工厂模式

将组装的部分(产品)放在一个工厂类里面,组成一个实体。
也可以认为前面的工厂模式是这里的产品。
注意,各产品的统一方法,各工厂的统一方法。

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
class 鸭子头:
def talk(self):
print("鸭子叫")
class 鸭子身体:
def move(self):
print("鸭子摆尾巴")
class 鸭子肢体:
def walk(self):
print("鸭子走路")

class 鸡头:
def talk(self):
print("鸡鸣")
class 鸡身体:
def move(self):
print("鸡摆尾巴")
class 鸡肢体:
def walk(self):
print("鸡走路")

class 鸭子:
"""
本工厂包含了多个产品
"""
def show():
return 鸭子头() + 鸭子身体() + 鸭子肢体()

class 鸡:
"""
本工厂包含了多个产品
"""
def show():
return 鸡头() + 鸡身体() + 鸡肢体()


class Test(factory):
"""
具体的使用
"""
factory.show()

单例模式

对 python ,class 默认就是单例

优点:

  • 优化内存占用

建造者模式

原型模式

结构型模式

建造者模式

建造者模式

建造者模式

建造者模式

建造者模式

建造者模式

  • 参考 *
坚持原创技术分享,您的支持将鼓励我继续创作!