python—单例模式与多例模式的区别与创建


  单例模式与多例模式最主要的区别是:

单例模式是一个类只有单个对象被创建
多例模式是一个类可以有多个对象被创建

一、单例模式创建

下面展示单例模式的创建过程:

1.通过类方法创建

#!usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author: admin
@file: 类方法.py
@time: 2021/05/24
@desc:
"""

class Custom():

    def __init__(self, name):
        import time
        time.sleep(1)
        self.name = name

    # 通过类方法创建实例
    @classmethod
    def creat_class(cls, *args, **kwargs):
        # 如果没有对象
        if not hasattr(Custom, "_instance"):
            Custom._instance = Custom(*args, **kwargs)
        return Custom._instance

# # 通过类方法来创建类的实例化对象
c1 = Custom.creat_class('张三')
c2 = Custom.creat_class('李四')
print(c1)
print(c2)
print(c1 is c2)  # True
<__main__.Custom object at 0x000002B8CD45F708>
<__main__.Custom object at 0x000002B8CD45F708>
True

但是,使用多线程时,使用类方法创建就会出现问题

#!usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author: admin
@file: 类方法.py
@time: 2021/05/24
@desc:
"""
import threading
import time

class Custom():

    def __init__(self, name):
        import time
        time.sleep(1)
        self.name = name

    # 通过类方法创建实例
    @classmethod
    def creat_class(cls, *args, **kwargs):
        # 如果没有对象
        if not 
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点。单例模式通常用于管理全局状态或提供共享资源。 创建单例模式需要以下步骤: 1. 将类的构造函数声明为私有的,以防止外部代码创建新的实例。 2. 在类中创建一个静态方法,该方法将返回类的唯一实例。 3. 在静态方法中,如果类的实例不存在,则创建一个新的实例,然后返回该实例。 4. 如果类的实例已经存在,则直接返回该实例。 以下是一个示例单例模式的实现: ```python class Singleton: _instance = None def __new__(cls): if not cls._instance: cls._instance = super().__new__(cls) return cls._instance ``` 多例模式是一种创建型设计模式,它允许创建多个类的实例,但是实例的数量是有限的,并且由该类的开发者预先设置。多例模式通常用于限制系统中某些资源的数量。 创建多例模式需要以下步骤: 1. 在类中创建一个静态属性,该属性将存储所有实例的列表。 2. 在类中创建一个静态方法,该方法将返回类的下一个可用实例。 3. 在静态方法中,使用类的实例列表来查找下一个可用实例。如果没有可用实例,则创建一个新的实例,并将其添加到实例列表中。 4. 在使用实例时,必须从静态方法中获取实例,而不是使用类的构造函数。 以下是一个示例多例模式的实现: ```python class Multiton: _instances = {} _max_instances = 2 def __new__(cls, instance_id): if len(cls._instances) < cls._max_instances: if instance_id not in cls._instances: cls._instances[instance_id] = super().__new__(cls) return cls._instances[instance_id] else: raise ValueError("Max number of instances reached.") ``` 在上面的示例中,Multiton 类允许创建最多两个实例。在创建实例时,必须提供一个 instance_id 参数,以便区分不同的实例。如果尝试创建超过两个实例,则会引发 ValueError 异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值