import threading
import os
import configparser
"""
饿汉式,
在创建的时候就会生成唯一的单例实例。
不能延迟加载。
"""
class Singleton(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance
"""
饿汉式 使用装饰器
"""
def singleton(cls):
_instance = {}
def _singleton(*args, **kwargs):
if not _instance[cls]:
_instance[cls] = cls(*args, **kwargs)
return _instance[cls]
return _singleton
@singleton
class Test(object):
def __init__(self, x):
self.x = x
"""
懒汉式,线程不安全的
"""
class Singleton2(object):
_instance = None
def __init__(self, *args, **kwargs):
if not self._instance:
print("实例未创建")
else:
print("实例已创建")
@classmethod
def get_instance(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Singleton2, cls).__new__(cls, *args, **kwargs)
return cls._instance
"""
饿汉式,线程安全的
"""
class Singleton3(object):
_instance = None
_instance_lock = threading.Lock()
@classmethod
def get_instance(cls, *args, **kwargs):
if not cls._instance:
with cls._instance_lock:
if not cls._instance:
cls._instance = super(Singleton3, cls).__new__(cls, *args, **kwargs)
return cls._instance
# 应用
class Config(object):
"""
创建配置文件单例类
"""
_instance_lock = threading.Lock()
def __init__(self):
root_dir = os.path.abspath(os.path.dirname(__file__))
case_dir = os.path.join(root_dir, "conf.ini")
self.cf = configparser.ConfigParser()
self.cf.read(case_dir)
def __new__(cls, *args, **kwargs):
if not hasattr(Config, "_instance"):
with Config._instance_lock:
if not hasattr(Config, "_instance"):
Config._instance = object.__new__(cls)
return Config._instance
def get_config(self, sectionname, key):
"""
获取配置文件内,对应sectionname内,key对应的value
"""
var = self.cf.get(sectionname, key)
return var
if __name__ == '__main__':
c1 = Config()
val = c1.get_config("base", "region")
print(val)
c2 = Config()
val2 = c2.get_config("base", "zone")
print(val2)
单例模式
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模...
- 定义:一个类只有一个实例,即使多次实例化该类,也只会返回第一次实例化后的对象。 使用闭包改进后的写法 单例模式用途...
- spring单例bean与设计模式的单例模式的区别在于它们关联的环境不一样。单例模式是指在一个JVM进程中仅有一个...
- 介绍: 单例模式是一种创建型模式。它保证一个类仅有一个实例,并提供一个访问它的全局访问点。 类图: Singlet...
- 单例模式的特点: 1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供...