设计模式
设计模式是一种编程套路, 可以极大的方便程序的开发
最常见, 最经典的设计模式, 就是面向对象
除了面向对象外, 在编程种也有很多既定的套路可以方便开发, 我们称之为设计模式:
- 单例, 工厂模式
- 建造者, 责任链, 状态, 备忘录, 解释器, 访问者, 观察者, 代理模式等
单例模式
class Tool:
pass
t1 = Tool()
t2 = Tool()
print(t1) # <__main__.Tool object at 0x000001F9303BB0E0>
print(t2) # <__main__.Tool object at 0x000001F9302DCB90>
创建类的实例后, 可以得到一个完成的, 独立的类对象, 通过 print 语句可以看出, 它们的内存地址是不相同的, 即 t1 和 t2 是完全独立的两个对象
某些场景下, 我们需要一个类无论获取多少次类对象, 都仅仅提供一个具体的实例, 用于节省创建类对象的开销和内存开销, 比如某些工具类, 仅需要 1 个实例, 即可在各处使用 , 这就是单例模式所要实现的效果
单例模式 (Singleton Pattern) 是一种常用的软件设计模式, 该模式的主要目的是确保某一个类只有一个实例存在, 在整个系统中, 某个类只能有一个实例是, 单例对象就能派上用场.
单例的实现模式:
# test.py
class Tool:
pass
str_tool = Tool()
# mian.py
from test import str_tool
s1 = str_tool
s2 = str_tool
print(s1) # <test.Tool object at 0x0000018CA977B0E0>
print(s2) # <test.Tool object at 0x0000018CA977B0E0>
s1 和 s2 就是同一个对象
工厂模式
当需要大量创建一个类的实例的时候, 可以使用工厂模式, 即, 从原生的使用类的构造去创建对象的形式 迁移到 基于工厂提供的方法去创建对象的形式
class Person:
pass
class Worker(Person):
pass
class Student(Person):
pass
class Teacher(Person):
pass
worker = Worker()
stu = Student()
teacher = Teacher()
以上代码是原生的使用类的构造去创建对象, 当需要构建的对象的数量非常多的时候,使用工厂模式会更加方便
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')
teacher = factory.get_person('t')
student = factory.get_person('s')
工厂模式就是当我们需要构建对象的时候, 先构建一个工厂, 然后通过工厂的方法去构建对象
这样看来是不是显得多此一举?
其实使用工厂模式有一下好处:
- 大批量创建对象的时候有统一的入口, 易于代码维护
- 当发生修改,仅修改共厂类的创建方法即可

534

被折叠的 条评论
为什么被折叠?



