Heim > Artikel > Backend-Entwicklung > Der Unterschied zwischen Singleton-Mustern in Java und Python
Die Beispiele in diesem Artikel beschreiben die Unterschiede zwischen Singleton-Mustern in Java und Python. Teilen Sie es wie folgt als Referenz mit allen:
Einzelfallmodus
Der Einzelfallmodus ist ein häufig verwendetes Software-Designmuster . Es enthält in seiner Kernstruktur nur eine spezielle Klasse namens Singleton. Das Singleton-Muster stellt sicher, dass es nur eine Instanz einer Klasse im System gibt. Das heißt, eine Klasse hat nur eine Objektinstanz.
/** * 单例模式 * 懒汉式 * 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: Da es lange gedauert hat, Python zu lernen, habe ich es getan Ich hatte keine Zeit, es zu überprüfen. Ich hoffe, dass die Leser darauf hinweisen.
Erstellen Sie ein Singleton-Muster
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
Im obigen Beispiel speichern wir die Instanz der Klasse in einem Klassenattribut __instance. Sobald das Klassenattribut nicht None ist, werden wir dies tun Rufen Sie nicht mehr __new__ auf, sondern geben Sie direkt __instance zurück. Um zu vermeiden, dass bei jedem Aufruf von Test() eine Instanzinitialisierung durchgeführt wird, haben wir außerdem ein __firstinit-Klassenattribut eingeführt. Das Ausführungsergebnis lautet:
<__main__.Test object at 0x000002507FF6E1D0> <__main__.Test object at 0x000002507FF6E1D0>
Wenn die Werte sind gleich, es kann bewiesen werden, dass es sich um dasselbe Objekt handelt.
Verwandte Empfehlungen:
6 des Singleton-Musters Implementierungsmethoden
Eine Zusammenfassung des Singleton-Modus und des Mehrfachfallmodus
Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen Singleton-Mustern in Java und Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!