Maison  >  Article  >  développement back-end  >  La différence entre le modèle singleton en Java et Python

La différence entre le modèle singleton en Java et Python

零到壹度
零到壹度original
2018-04-19 16:14:351530parcourir

Les exemples de cet article décrivent les différences entre les modèles singleton en Java et Python. Partagez-le avec tout le monde pour référence, comme suit :

Mode cas unique

Le mode cas unique est un modèle de conception de logiciel couramment utilisé. . Il ne contient qu’une seule classe spéciale appelée singleton dans sa structure de base. Le modèle singleton garantit qu’il n’y a qu’une seule instance d’une classe dans le système. Autrement dit, une classe n’a qu’une seule instance d’objet.

1. Modèle Singleton en 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. Modèle Singleton en Python

PS : Il a fallu beaucoup de temps pour apprendre Python, je n'ai pas encore appris Je n’ai pas eu le temps de le revoir. S’il y a des erreurs, j’espère que les lecteurs les signaleront.

Construire un modèle singleton

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

Dans l'exemple ci-dessus, nous enregistrons l'instance de la classe dans un attribut de classe __instance Une fois que l'attribut de classe n'est pas Aucun, nous le ferons. n'appelle plus __new__, mais renvoie directement __instance. De plus, afin d'éviter que l'initialisation de l'instance ne soit exécutée à chaque fois que Test() est appelé, nous avons introduit un attribut de classe __firstinit. Le résultat de l'exécution est :

<__main__.Test object at 0x000002507FF6E1D0>
<__main__.Test object at 0x000002507FF6E1D0>

Si les valeurs sont les mêmes. de même, on peut prouver qu’il s’agit du même objet.


Recommandations associées :

6 du modèle singleton Méthodes de mise en œuvre

Un résumé du mode singleton et du mode cas multiples

Modèle de cas unique analyse

modèle singleton Java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn