Chapter 38 计划模式

[复制链接]
发表于 2026-2-7 03:14:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
接待各人订阅【Python从入门到夺目】专栏,一起探索Python的无穷大概!
  


媒介

在软件开发中,计划模式提供了一种可重用的办理方案,以应对在特定情况中反复出现的题目。这些模式是基于履历总结的最佳实践,可以或许进步代码的可维护性、可读性和机动性。本章具体先容了两个常用的计划模式:单例模式和工厂模式。

本篇文章参考:黑马步伐员
一、单例模式

①界说
单例模式是一种创建型计划模式,确保某个类只有一个实例,并提供一个全局访问点。
②实用场景


  • 体系只必要一个共享的实例来管理某些资源时(如设置管理、日志日志记载)
  • 多个客户端必要访问该实例时
在Python中,创建类的实例后,可以得到一个完备、独立的对象。以下是一个简单的示例:
  1. class StrTools:
  2.     pass
  3. s1=StrTools()
  4. s2=StrTools()
  5. print(s1)
  6. print(s2)
复制代码
  输出结果:
<main.StrTools object at 0x000001AB2A816240>
<main.StrTools object at 0x000001AB2A814E30>
  【分析】
通过 print 语句可以看出,s1和s2的内存所在差异,这表明它们是完全独立的两个对象。
然而,在某些场景下,我们大概盼望一个类岂论被实例化多少次,都只提供一个具体的实例。这种计划可以资助我们节省创建对象的开销和内存利用。比方,对于一些工具类,只需一个实例即可在各个地方利用。这也正是单例模式(Singleton Pattern)所要实现的结果。通过单例模式,我们可以确保在整个应用步伐中只有一个实例存在,从而优化资源管理并提升性能。
③实现方式
a. 界说实例:
在一个.py文件中界说一个实例
  1. class StrTools:
  2.     pass
  3. str_tool=StrTools()
复制代码
b. 导入实例:
在另一个文件中导入这个实例
  1. from str_tools import str_tool
  2. s1=str_tool
  3. s2=str_tool
  4. print(s1)
  5. print(s2)
复制代码
  输出结果:
<str_tools_py.StrTools object at 0x000001AB2A803F50>
<str_tools_py.StrTools object at 0x000001AB2A803F50>
  【分析】
s1 和 s2 都指向同一个 str_tool 实例,它们现实上引用的是同一个对象,以是都指向同一个内存所在。
二、工厂模式

①界说
工厂模式是一种创建型计划模式,通过界说一个接口来创建对象的实例,而不必要指明具体类的实例化过程。
②实用场景


  • 必要大量创建相似范例的对象时
  • 体系必要对产物的创建过程举行管理时
利用类的构造去创建对象:
  1. class Person:
  2.     pass
  3. class Worker(Person):
  4.     pass
  5. class Student(Person):
  6.     pass
  7. class Teacher(Person):
  8.     pass
  9. worker=Worker()
  10. stu=Student()
  11. teacher=Teacher()
复制代码
【分析】
该段代码简单直接,恰当于简单对象创建、类数目较少、无复杂依靠关系的代码场景。但代码扩展性较差,当必要新增大量子类时,必要在每个地方修改代码,会增长维护资本。
基于工厂提供的方法去创建对象:
  1. class Person:
  2.     pass
  3. class Worker(Person):
  4.     pass
  5. class Student(Person):
  6.     pass
  7. class Teacher(Person):
  8.     pass
  9. class PersonFactory:
  10.     def get_person(self,p_type):
  11.         if p_type=="w":
  12.             return Worker()
  13.         elif p_type=="s":
  14.             return Student()
  15.         else:
  16.             return Teacher()
  17. pf=PersonFactory()
  18. worker=pf.get_person("w")
  19. stu=pf.get_person("s")
  20. worker=pf.get_person("t")
复制代码
【分析】
这段代码将对象的创建封装在工厂类中,通过工厂类的 get_person()方法来创建具体的类对象,符合现实天下的模式,即由工厂负责生产产物(对象)。如果将来要添加新的子类(如 Admin),只需在 get_person() 方法中添加相应的逻辑,而不必要对其他代码举行修改,易于扩展,可维护性高。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表