31.设计模式
单例模式
比如工具类,进需要一个实例,即可以在各处处理。用以节省创建类对象的开销和内存的开销。
保证一个类只有一个实例,而客户可以从一个众所周知的访问点访问它。
实现一个简单的单例
在一个python文件中定义一个类,并创建该类的对象
class StrTools:
pass
str_tool = StrTools()
在另一个python文件中定义导入该类对象使用
from oper_mysql import str_tool
s1 = str_tool
s2 = str_tool
# True
print(s1 == s2)
# <oper_mysql.StrTools object at 0x03ECEB90>
print(s1)
# <oper_mysql.StrTools object at 0x03ECEB90>
print(s2)
# 35402256
print(id(s1))
# 35402256
print(id(s2))
工厂模式
class Person:
pass
class Worker(Person):
pass
class Student(Person):
pass
class Teacher(Person):
pass
class Factory:
def get_person(self, p_type):
if p_type == 'w':
return Worker()
elif p_type == 's':
return Student()
else:
return Teacher()
factory = Factory()
worker = factory.get_person('w')
student = factory.get_person('s')
teacher = factory.get_person('t')
使用get_person方法去创建具体的类对象。
优点:
1.大批量创建对象的时候有统一的入口,易于代码维护。
2.当发生修改,仅修改工厂类的创建方法即可。
3.符合现实世界的模式,即由工厂来制作产品。