python单例模式

在python中单例模式关键的地方是java或者c++里面的私有构造函数的问题,因为python没有访问约束标识符,所以要用其他方法模拟相似的功能。这里使用mixin的方法实现,分别如下:

1 ThreadSafeMixin:用于管理线程安全

2 NotDirectMixin:用于模拟禁止直接实例化类

3 SingletonMixin:用于实现getInstance方法

ThreadSafeMixin的实现:

NotDirectMixin的实现:

SingletonMixin的实现:

然后使用一个聚合类将mixin的功能都聚合到一起:

 

最后进行测试:

输出:

 

这里有几点需要说明一下:

1 双下划线的类变量会对名字进行重整,规则为”_” + 变量所在的类的名称 + 变量名称

2 单例Test其实并不是存在SingletonMixin的__instance变量中,末端的所有单例都存放在自己的类变量里面的。以Test类为例:

当读取cls.__instance的时候实际是读取Test._SingletonMixin__instance,由于一开始Test类并没有这个变量,继续往父类搜索,找到SingletonMixin._SingletonMixin__instance。但是当赋值表达式cls.__instance=XXX后,Test._SingletonMixin__instance就存在了。后面读取cls.__instance的时候实际上是读取Test._SingletonMixin__instance。

 

 

有问题的直接评论或发email:1163609142@qq.com

 

 

 

 

shadow post

shadow post

3-Cantonese Vowels

View Fullscreen