本文实例讲述了Java与Python中单例模式的区别。分享给大家供大家参考,具体如下:
单例模式
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。
/** * 单例模式 * 懒汉式 * 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; } }
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 = 0 if __name__ == "__main__": a = Test() b = Test() print a print b
上例中我们将类的实例保存到一个类属性 __instance 中,一旦类属性不为 None,我们就不再调用 __new__,而是直接返回 __instance。另外为避免每次调用 Test() 都会执行一遍实例初始化,我们引入了一个 __firstinit 的类属性,执行结果:
<__main__.Test object at 0x000002507FF6E1D0> <__main__.Test object at 0x000002507FF6E1D0>
值相同,即可证明为同一对象。
相关推荐:
Atas ialah kandungan terperinci Java与Python中单例模式的区别. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!