Java与Python中单例模式的区别
本文实例讲述了Java与Python中单例模式的区别。分享给大家供大家参考,具体如下:
单例模式
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。
一、Java中的单例模式
/** * 单例模式 * 懒汉式 * 1)、构造器私有化 * 2)、声明私有的静态属性 * 3)、对外提供访问属性的静态方法,确保该对象存在 */public class SingleCase {private static SingleCase sc = null;private SingleCase() {}public static SingleCase getSingleCase() { if (sc == null) { return new SingleCase(); } return sc;}}/** * 单利模式 * 饿汉式 * 1)、构造器私有化 * 2)、声明私有的静态属性,同时创建该对象 * 3)、对外提供访问属性的静态方法 * */class SingleCase01 {private static SingleCase01 sc = new SingleCase01();private SingleCase01() {}public static SingleCase01 getSingleCase() { return sc;}}/** * 饿汉式** 类在使用的时候加载 ,延缓加载时间*/class SingleCase02 {private static class innerclass{ //内部类 private static SingleCase02 sc = new SingleCase02();}private SingleCase02() {}public static SingleCase02 getSingleCase() { return innerclass.sc;}}
二、Python中的单例模式
ps:由于python学过的时间有点长,一直也没时间复习,如果有错误希望广大读者指出来。
构建单例模式
class Test(object): __instance = None __firstinit = 1 def __new__(cls, *args, **kwargs): if Test.__instance == None: Test.__instance = object.__new__(cls, *args, **kwargs) return Test.__instance def __init__(self): if not Test.__firstinit: return Test.__firstinit = 0if __name__ == "__main__": a = Test() b = Test() print a print b
上例中我们将类的实例保存到一个类属性 __instance 中,一旦类属性不为 None,我们就不再调用 __new__,而是直接返回 __instance。另外为避免每次调用 Test() 都会执行一遍实例初始化,我们引入了一个 __firstinit 的类属性,执行结果:
立即学习“Java免费学习笔记(深入)”;
<__main__.test><__main__.test></__main__.test></__main__.test>
值相同,即可证明为同一对象。