Modèle de conception de développement Android (1, Singleton (mode singleton))

D'une manière générale, les modèles de conception en Java peuvent être divisés en trois types: les modèles de création, les modèles structurels et les modèles de comportement.


Parlons du modèle de création aujourd'hui


Il existe cinq modes de création: mode singleton, mode méthode d'usine, mode usine abstraite, mode constructeur et mode prototype.


One, Singleton (mode singleton)

Mode singleton: il peut garantir qu'il n'y a qu'une seule instance d'une classe, et il peut instancier et fournir cette instance à l'ensemble du système.

Dans un système informatique, les objets pilotes du pool de threads, du port série, du cache, de l'objet journal, de la boîte de dialogue, de l'imprimante et de la carte graphique sont souvent conçus comme des singletons. Ces applications ont plus ou moins la fonction de gestionnaire de ressources. Le mode singleton peut être implémenté de plusieurs manières différentes.

(1) Mode singleton de style homme paresseux

// SingletonOne.java

classe publique SingletonOne {

      privé statique SingletonOne singleton = null;

      privé SingletonOne () {}

      public static SingletonOne getInstance () {

             if (singleton == null) {

                    singleton = nouveau SingletonOne ();

              }

             returningleton;

      }

}

Le mode singleton n'est pas thread-safe et peut ne pas poser de problèmes dans le cas d'une faible concurrence d'accès, mais dans le cas d'une forte concurrence, plusieurs instances peuvent apparaître dans le système. Par exemple: il y a deux threads, le premier thread a exécuté singleton = newSingletonOne (), mais l'objet n'a pas encore été obtenu (l'objet est en cours d'initialisation, et l'initialisation prend un certain temps), puis le second thread s'exécute à if (singleton = = null), alors la condition if du deuxième thread est également établie, de sorte que les deux threads obtiennent chacun un objet, ce qui entraîne deux objets dans la mémoire.

Afin de résoudre le problème de sécurité des threads, vous pouvez modifier le mode différé, ajouter le mot clé synchronized avant la méthode getInstance ou utiliser le mot clé synchronized à l'intérieur de la méthode, mais ce n'est pas le meilleur mode singleton.

(2) Mode singleton chinois affamé

Le meilleur motif singleton:

// SingletonTwo.java

classe publique SingletonTwo {

      privé statique final SingletonTwo singleton = new SingletonTwo ();

      Private SingletonTwo () {}

      public static SingletonTwo getInstance () {

              returningleton;

      }

}

Le mode singleton de l'homme affamé consiste à créer un objet statique pour une utilisation système en même temps que la classe est créée, et il ne changera pas à l'avenir, il est donc thread-safe.




Je suppose que tu aimes

Origine blog.csdn.net/xhf_123/article/details/49837197
conseillé
Classement