Maison  >  Article  >  développement back-end  >  Présentation du modèle singleton de Python

Présentation du modèle singleton de Python

PHPz
PHPzoriginal
2017-04-02 13:26:481198parcourir

Le bus est l'une des solutions de communication publique permettant de transmettre des données, des signaux de commande et d'autres informations entre divers composants ou appareils fonctionnels de l'ordinateur. Supposons maintenant le scénario suivant : une unité centrale de traitement (CPU) est connectée à un sémaphore via un certain bus de protocole. Le sémaphore a 64 couleurs qui peuvent être définies. Il y a trois threads exécutés sur le CPU, qui peuvent tous contrôler le sémaphore. , et la couleur de ce signal lumineux peut être réglée indépendamment. Résumez les détails du protocole (représentés par l'impression) et comment implémenter la logique de contrôle du thread pour les signaux, etc.
L'ajout de thread locks pour le contrôle est sans doute la première méthode qui vient à l'esprit, mais le contrôle des locks par chaque thread augmente sans aucun doute le couplage entre modules. Ensuite, nous utiliserons le Modèle de cas unique dans le Modèle de conception pour résoudre ce problème.
Qu'est-ce que le modèle singleton ? Le modèle singleton signifie : garantir qu'une classe n'a qu'une seule instance et fournir un point d'accès global pour y accéder. Plus précisément dans cet exemple, l'objet bus est un singleton, qui n'a qu'une seule instance. Chaque thread n'a qu'un seul point d'accès global pour le bus, c'est-à-dire la seule instance.
PythonLe code est le suivant :

#encoding=utf8import threading
import time#这里使用方法new来实现单例模式class Singleton(object):#抽象单例
    def new(cls, *args, **kw):        if not hasattr(cls, '_instance'):
            orig = super(Singleton, cls)
            cls._instance = orig.new(cls, *args, **kw)        return cls._instance#总线class Bus(Singleton):
    lock = threading.RLock()    def sendData(self,data):        self.lock.acquire()
        time.sleep(3)
        print "Sending Signal Data...",data        self.lock.release()#线程对象,为更加说明单例的含义,这里将Bus对象实例化写在了run里class VisitEntity(threading.Thread):
    my_bus=""
    name=""
    def getName(self):        return self.name    def setName(self, name):        self.name=name    def run(self):        self.my_bus=Bus()        self.my_bus.sendData(self.name)if  name=="main":    for i in range(3):
        print "Entity %d begin to run..."%i
        my_entity=VisitEntity()
        my_entity.setName("Entity_"+str(i))
        my_entity.start()

Le résultat de l'exécution est le suivant :
L'entité 0 commence à s'exécuter...
L'entité 1 commence à exécuter...
L'entité 2 commence à s'exécuter...
Envoi de données de signal... Entité_0
Envoi de données de signal... Entité_1
Envoi de données de signal... Entité_2
Pendant le exécution du programme, trois Les threads s'exécutent en même temps (les trois premières lignes des résultats en cours d'exécution sont imprimées rapidement), puis occupent les ressources du bus séparément (les trois dernières lignes sont imprimées toutes les 3 secondes). Bien qu’il semble que le bus soit instancié trois fois, il n’y a en réalité qu’une seule instance en mémoire.

Modèle à cas unique

Le modèle à cas unique est un type relativement simple de tous les modèles de conception. Sa définition est la suivante : assurez-vous qu'une classe n'a qu'une seule instance et fournit un point global de. accès à celui-ci. (Garantie qu'une certaine classe n'a qu'une seule instance et un seul point d'accès au niveau mondial)

Avantages et applications du mode singleton

Avantages du mode singleton :
1. en mode singleton Le mode exemple nécessite qu'il n'y ait qu'une seule instance globalement, ce qui permet d'économiser beaucoup d'espace mémoire
2. Il n'y a qu'un seul point d'accès globalement, ce qui permet de mieux contrôler la synchronisation des données et d'éviter une occupation multiple ; 🎜>3. Des exemples uniques peuvent être stockés en mémoire pour réduire la surcharge du système.
Exemples d'application du mode singleton :
1. Générer un numéro de série unique au monde
2. Accédez à des ressources uniques réutilisées à l'échelle mondiale, telles que des disques, des bus, etc.
3. Trop de ressources, comme les bases de données, etc. ;
4. Gestion globale unifiée du système, comme le gestionnaire de tâches sous Windows
5.

Inconvénients du modèle singleton

1. L'expansion du modèle singleton est relativement difficile

2 Il attribue trop de responsabilités au modèle singleton, ce qui viole le modèle singleton ; degré.Principe de responsabilité (les six principes seront discutés plus tard) ;
3. Le mode singleton est la première chose à compléter dans le module logiciel de collaboration simultanée, il n'est donc pas propice aux tests ; Le mode singleton est utilisé dans certaines situations. Cela entraînera des « goulots d'étranglement des ressources ».

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