Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in das Singleton-Muster von Python

Einführung in das Singleton-Muster von Python

PHPz
PHPzOriginal
2017-04-02 13:26:481251Durchsuche

Der Bus ist eine der öffentlichen Kommunikationslösungen zur Übertragung von Daten, Steuersignalen und anderen Informationen zwischen verschiedenen Funktionskomponenten oder Geräten des Computers. Nehmen wir nun das folgende Szenario an: Eine Zentraleinheit (CPU) ist über einen bestimmten Protokollbus mit einem Semaphor verbunden. Auf dem Semaphor laufen drei Threads, die alle den Semaphor steuern können , und Die Farbe dieser Signalleuchte kann unabhängig eingestellt werden. Zusammenfassung der Protokolldetails (dargestellt durch Drucken) und wie die Steuerlogik des Threads für Signale usw. implementiert wird.
Das Hinzufügen von Thread-Sperren zur Steuerung ist zweifellos die erste Methode, die mir in den Sinn kommt, aber die Steuerung von Sperren durch jeden Thread erhöht zweifellos die Kopplung zwischen Modulen. Als nächstes verwenden wir das Einzelfallmuster im Entwurfsmuster, um dieses Problem zu lösen.
Was ist das Singleton-Muster? Das Singleton-Muster bedeutet: Sicherstellen, dass eine Klasse nur eine Instanz hat und Bereitstellen eines globalen Zugriffspunkts für den Zugriff darauf. Konkret ist in diesem Beispiel das Bus--Objekt ein Singleton, der nur eine Instanz hat. Jeder Thread hat nur einen globalen Zugriffspunkt für den Bus, also die einzige Instanz.
PythonDer Code lautet wie folgt:

#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()

Das laufende Ergebnis lautet wie folgt:
Entität 0 beginnt zu laufen...
Entität 1 beginnt zu laufen laufen...
Entität 2 beginnt zu laufen...
Signaldaten werden gesendet... Entität_0
Signaldaten werden gesendet... Entität_1
Signaldaten werden gesendet... Entität_2
Während der Beim Ausführen des Programms werden drei Threads gleichzeitig ausgeführt (die ersten drei Zeilen der laufenden Ergebnisse werden schnell ausgedruckt) und dann die Busressourcen separat belegt (die letzten drei Zeilen werden alle 3 Sekunden ausgedruckt). Obwohl es so aussieht, als ob der Bus dreimal instanziiert wird, befindet sich tatsächlich nur eine Instanz im Speicher.

Einzelfallmuster

Einzelfallmuster ist ein relativ einfacher Typ aller Entwurfsmuster. Seine Definition lautet wie folgt: Stellen Sie sicher, dass eine Klasse nur eine Instanz hat, und stellen Sie einen globalen Punkt bereit Zugriff darauf. (Garantie, dass eine bestimmte Klasse global nur eine Instanz und nur einen Zugriffspunkt hat)

Vorteile und Anwendungen des Singleton-Modus

Vorteile des Singleton-Modus:
Fällig zum Singleton-Modus Der Beispielmodus erfordert, dass es global nur eine Instanz gibt, sodass viel Speicherplatz gespart werden kann
2. Es gibt nur einen Zugriffspunkt global, wodurch die Datensynchronisierung besser gesteuert und eine Mehrfachbelegung vermieden werden kann 🎜>3. Beispiele für einzelne Zugriffspunkte können im Speicher gespeichert werden, um den Systemaufwand zu reduzieren.
Anwendungsbeispiele für den Singleton-Modus:
Erzeugen Sie eine global eindeutige Seriennummer.
Ein einzelnes Objekt belegt Zu viele Ressourcen, wie z. B. Datenbanken usw.;
4. Globale einheitliche Verwaltung des Systems, wie z. B. Task-Manager unter Windows;

Nachteile des Singleton-Musters

1. Die Erweiterung des Singleton-Musters ist relativ schwierig.

2. Es weist dem Singleton zu viele Verantwortlichkeiten zu, was einigen zuwiderläuft Verantwortungsprinzip (die sechs Prinzipien werden später besprochen); In bestimmten Situationen wird der Singleton-Modus verwendet. Dies führt zu „Ressourcenengpässen“.

Das obige ist der detaillierte Inhalt vonEinführung in das Singleton-Muster von 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