本文實例講述了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>
值相同,即可證明為相同物件。
相關推薦:
以上是Java與Python中單例模式的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!