python中单实例模式实现

单例模式:一种软件设计中经常使用的设计模式,属于创建型模式中的一种,其目的是确保类只有一个实例。

1、重写__new__方法:原理为通过一个类静态变量保存对象值,以后每次进行实例化对象时,都使用静态变量保存的对象值。

2、装饰器:原理同重新__new__方法一样

3、元类:原理同上

4、模块:利用了python加载模块时,只是第一次运行模块内容,以后都是直接使用模块.pyc文件原理

线程安全:多线程中进行单例模式的实现时,因为多线程是抢占式,因此需要加锁才能保证单例模式。

无派生类

singleton.py

# -*- coding: utf-8 -*-
# @Author: kg
# @Date:   2019-01-03 16:06:10
# @Last Modified by:   Administrator
# @Last Modified time: 2019-01-04 16:11:29
# @aim: 实现单例模式
# @env: python3.5

# 无派生类


from unittest import TestCase, main


class newSingleton():
    """重写__new__方法实现单例模式"""

    _instance = None  # 保存单例实例对象

    def __new__(cls, *args, **kwargs):

        if cls._instance is None:
            cls._instance = super().__new__(cls, *args, **kwargs)
        return cls._instance


def getSingleton(cls):
    """装饰器进行类实例检查"""
    def check():
        if hasattr(cls, "_instance") is False:
            cls._instance = cls()

        return cls._instance
    return check


@getSingleton
class deSingleton():
    """装饰器实现单例模式"""
    pass


class metaSingleton(type):
    """元类方式实现单例模式"""

    _instance = None

    def __call__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super().__call__(*args, **kwargs)

        return cls._instance


class mySingleton(metaclass=metaSingleton):
    """元类直接实例化比较复杂,所以使用额外类完成单实例对象"""
    pass


class myTest(TestCase):
    """单元测试"""

    def testNewSingleton(self):
        a = newSingleton(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值