Heim  >  Artikel  >  Backend-Entwicklung  >  Der Unterschied zwischen Singleton-Mustern in Java und Python

Der Unterschied zwischen Singleton-Mustern in Java und Python

零到壹度
零到壹度Original
2018-04-19 16:14:351528Durchsuche

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. Singleton-Muster in 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;
	}
}

2. Singleton-Muster in Python

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

Einzelfallmuster Analyse

Java-Singleton-Muster

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn