Python 设计模式 -- 单例模式
2017-06-21 17:18
281 查看
Python 单例模式
单例模式的意思是在同一个运行环境中一个进程里面,这个类的实例只有一份,该实例也只会初始化一次。python 语言的单例模式至少可以有4种实现方式:
1.使用
__new__构造函数:
class Singleton(object): __instance = None def __new__(cls, *argv, **kwags): if Singleton.__instance is None: Singleton.__instance = object.__new__(cls, *argv, **kwags) return Singleton.__instance class MyFoo(Singleton): pass f1 = MyFoo() f2 = MyFoo() print f1 print f2 >><__main__.MyFoo object at 0x7fd9f2a96110> <__main__.MyFoo object at 0x7fd9f2a96110>
2.使用python装饰器实现:
def singleton(cls): __instance = {} def _singleton(*argv, **kwags): if cls not in __instance: __instance[cls] = cls(*argc, **kwags) return __instance[cls] return _singleton @singleton class MyFoo(object): def __init__(self, age): self.age = age f1 = MyFoo(12) f2 = MyFoo(13) print f1 print f2 print f1.age print f2.age >><__main__.MyFoo object at 0x7fab563f4150> <__main__.MyFoo object at 0x7fab563f4150> 12 12
3.使用import的方式:
#mySingleClass.py class MySingleClass(object): def __init__(self): pass single_instance = MySingleClass() #test.py def func1(): from mySingleClass import single_instance print(single_instance) def func2(): from mySingleClass import single_instance print(single_instance) func1() func2() >><mySingleClass.MySingleClass object at 0x7f13fa14e210> <mySingleClass.MySingleClass object at 0x7f13fa14e210>
4.共享属性:
创建实例时把所有实例的
__dict__指向同一个字典,这样它们具有相同的属性和方法.
这种方式和前面3种方式并不能相提并论,我觉得它根本没有实现正真意义上的单例,因为它实例化的时候创建的是id不同的实例,虽然指向了相同的
__dict__。不推荐这种方式,有误导性。
class Singleton(object): __global_dict = {} def __new__(cls, *args, **kwags): __instance = object.__new__(cls, *args, **kwags) __instance.__dict__ = Singleton.__global_dict return __instance class MyFoo(Singleton): def __init__(self, name): self.name = name f1 = MyFoo("Python") f2 = MyFoo("Java") print(f1) print(f2) print f1.name print f2.name >><__main__.MyFoo object at 0x7fdc1315c350> <__main__.MyFoo object at 0x7fdc1315c390> Java Java
相关文章推荐
- Python设计模式系列之一: 用模式改善软件设计
- 设计模式之python版(六)--原型模式
- 设计模式之python版(四)代理模式
- 设计模式之python版(三)--装饰模式
- 【设计模式】观察者模式(observer)c#/python实现
- <读书笔记> Thinking in python (Python 设计模式) 3. Proxy and State模式
- Head First 设计模式—Python实现
- Head First 设计模式——装饰器(Decorator Pattern)——Python实现
- 设计模式之python版(二)--策略模式
- Head First 设计模式——策略模式(Strategy Pattern)——Python实现
- python与设计模式之二 装饰器模式(以dota为例)
- Python设计模式系列之一: 用模式改善软件设计(转载)
- Python设计模式系列之一: 用模式改善软件设计
- Head First 设计模式——观察者模式(Observer Pattern)——Python实现(1)
- <读书笔记> Thinking in python (Python 设计模式) 2. Templated Method
- <读书笔记> Thinking in python (Python 设计模式) 1. Singlton的c++与python的实现
- Python语言与设计模式
- Python 与设计模式 1
- 设计模式之python版(一)--工厂模式
- Python设计模式系列之一: 用模式改善软件设计