前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python设计模式

Python设计模式

原创
作者头像
Heaven645
发布2024-08-15 16:00:39
851
发布2024-08-15 16:00:39
举报
文章被收录于专栏:Python学习

在软件开发中,设计模式提供了一种可重用的解决方案,以应对在特定环境中反复出现的问题。这些模式是基于经验总结的最佳实践,能够提高代码的可维护性、可读性和灵活性。以下是两个常用的设计模式的详细介绍:单例模式和工厂模式。

一、单例模式

①定义

单例模式是一种创建型设计模式,确保某个类只有一个实例,并提供一个全局访问点。

②适用场景

  • 系统只需要一个共享的实例来管理某些资源时(如配置管理、日志记录)
  • 多个客户端需要访问该实例时

在Python中,创建类的实例后,可以得到一个完整、独立的对象。以下是一个简单的示例:

代码语言:python
代码运行次数:0
复制
class StrTools:
    pass

s1=StrTools()
s2=StrTools()
print(s1)
print(s2)

输出结果:

<main.StrTools object at 0x000001AB2A816240>

<main.StrTools object at 0x000001AB2A814E30>

【分析】

通过print语句可以看出,s1和s2的内存地址不同,这表明它们是完全独立的两个对象。

然而,在某些场景下,我们可能希望一个类不论被实例化多少次,都只提供一个具体的实例。这种设计可以帮助我们节省创建对象的开销和内存使用。例如,对于一些工具类,只需一个实例即可在各个地方使用。这也正是单例模式(Singleton Pattern)所要实现的效果。通过单例模式,我们可以确保在整个应用程序中只有一个实例存在,从而优化资源管理并提升性能。

③实现方式

a. 定义实例:

在一个.py文件中定义一个实例

代码语言:python
代码运行次数:0
复制
class StrTools:
    pass

str_tool=StrTools()

b. 导入实例:

在另一个文件中导入这个实例

代码语言:python
代码运行次数:0
复制
from str_tools import str_tool
s1=str_tool
s2=str_tool
print(s1)
print(s2)

输出结果:

<str_tools_py.StrTools object at 0x000001AB2A803F50>

<str_tools_py.StrTools object at 0x000001AB2A803F50>

【分析】

s1 和 s2 都指向同一个 str_tool 实例,它们实际上引用的是同一个对象,所以都指向同一个内存地址。

二、工厂模式

①定义

工厂模式是一种创建型设计模式,通过定义一个接口来创建对象的实例,而不需要指明具体类的实例化过程。

②适用场景

  • 需要大量创建相似类型的对象时
  • 系统需要对产品的创建过程进行管理时

使用类的构造去创建对象:

代码语言:python
代码运行次数:0
复制
class Person:
    pass

class Worker(Person):
    pass

class Student(Person):
    pass

class Teacher(Person):
    pass


worker=Worker()
stu=Student()
teacher=Teacher()

【分析】

该段代码简单直接,适合于简单对象创建、类数目较少、无复杂依赖关系的代码场景。但代码扩展性较差,当需要新增大量子类时,需要在每个地方修改代码,会增加维护成本。

基于工厂提供的方法去创建对象:

代码语言:python
代码运行次数:0
复制
class Person:
    pass

class Worker(Person):
    pass

class Student(Person):
    pass

class Teacher(Person):
    pass

class PersonFactory:
    def get_person(self,p_type):
        if p_type=="w":
            return Worker()
        elif p_type=="s":
            return Student()
        else:
            return Teacher()

pf=PersonFactory()
worker=pf.get_person("w")
stu=pf.get_person("s")
worker=pf.get_person("t")

【分析】

这段代码将对象的创建封装在工厂类中,通过工厂类的 get_person()方法来创建具体的类对象,符合现实世界的模式,即由工厂负责生产产品(对象)。如果未来要添加新的子类(如 Admin),只需在 get_person() 方法中添加相应的逻辑,而不需要对其他代码进行修改,易于扩展,可维护性高。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、单例模式
  • 二、工厂模式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档