mysql jdbc 单利_单例模式的四种方式

一、内容保证一个类只有一个实例,并提供一个访问它的全局访问点二、角色单利三、使用场景当类只有一个实例而且客户可以从一个众所周知的访问点访问它时比如:数据库链接、Socket创建链接四、优点对唯一实例的受控访问单利相当于全局变量,但防止了命名空间被污染与单利模式功能相似的概念:全局变量、静态变量(方法)试问?为什么用单例模式,不用全局变量呢?答、全局变量可能会有名称空间的干扰,如果有重名的可能会被覆...
摘要由CSDN通过智能技术生成

一、内容

保证一个类只有一个实例,并提供一个访问它的全局访问点

二、角色

单利

三、使用场景

当类只有一个实例而且客户可以从一个众所周知的访问点访问它时

比如:数据库链接、Socket创建链接

四、优点

对唯一实例的受控访问

单利相当于全局变量,但防止了命名空间被污染

与单利模式功能相似的概念:全局变量、静态变量(方法)

试问?为什么用单例模式,不用全局变量呢?

答、全局变量可能会有名称空间的干扰,如果有重名的可能会被覆盖

五、单例模式的四种实现方式

1、文件导入的形式(常用)

s1.pyclassFoo(object):deftest(self):print("123")

v=Foo()#v是Foo的实例

s2.pyfrom s1 importv as v1print(v1,id(v1)) # 35788560

from s1 importv as v2print(v1,id(v2)) # 35788560

#两个的内存地址是一样的#文件加载的时候,第一次导入后,再次导入时不会再重新加载。

2、基于类实现的单例模式

#======================单例模式:无法支持多线程情况===============

classSingleton(object):def __init__(self):importtime

time.sleep(1)

@classmethoddef instance(cls, *args, **kwargs):if not hasattr(Singleton, "_instance"):

Singleton._instance= Singleton(*args, **kwargs)returnSingleton._instanceimportthreadingdeftask(arg):

obj=Singleton.instance()print(obj)for i in range(10):

t= threading.Thread(target=task,args=[i,])

t.start()#====================单例模式:支持多线程情况================、

importtimeimportthreadingclassSingleton(object):

_instance_lock=threading.Lock()def __init__

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值