Das Verhindern des Musters

Das stockende Muster ist ein Softwaredesignmuster, das nur eine Handlung auf einem Gegenstand durchführt, wenn der Gegenstand in einem besonderen Staat ist. Zum Beispiel, wenn ein Gegenstand SCHWIRREN-Dateien liest und eine Benennen-Methode eine bekommen Methode auf dem Gegenstand anruft, wenn die SCHWIRREN-Datei nicht offen ist, würde der Gegenstand bei der Bitte "stocken". Auf der javanischen Programmiersprache, zum Beispiel, könnte IllegalStateException unter diesen Verhältnissen geworfen werden.

Es gibt einige Fachmänner in diesem Feld, die denken, dass das mehr von einem Antimuster ist als ein Designmuster. Wenn ein Gegenstand seine API nicht unterstützen kann, sollte er entweder die API beschränken, so dass der verstoßende Anruf nicht verfügbar ist, oder so dass der Anruf uneingeschränkt gemacht werden kann, sollte er:

  • Werden Sie in einem geistig gesunden Staat geschaffen
  • Nicht stellen sich bereit, bis es in einem geistig gesunden Staat ist
  • Werden Sie eine Fassade und wehren Sie sich gegen einen Gegenstand, der in einem geistig gesunden Staat ist

Gebrauch

Gegenstände, die dieses Muster verwenden, sind allgemein nur in einem Staat, der für das Verhindern provisorisch, aber für eine unbekannte Zeitdauer anfällig ist. Wenn Gegenstände sind, in einem Staat zu bleiben, der für das Verhindern seit einer bekannten, begrenzten Zeitspanne anfällig ist, dann kann das vorsichtige Suspendierungsmuster bevorzugt werden.

Durchführung

Unten ist ein allgemeines, einfaches Beispiel für eine Durchführung des stockenden Musters, wie ursprünglich gesehen, darin. Wie demonstriert, durch die Definition oben, bemerken Sie, wie die "synchronisierte" Linie verwertet wird. Wenn es vielfache Anrufe zur Job-Methode gibt, werden nur ein weitergehen, während die anderen Anrufe mit nichts zurückkehren werden. Ein anderes Ding zu bemerken ist die Methode. Der Grund es wird synchronisiert, besteht darin, weil die einzige Weise, einen anderen Faden zu versichern, sehen wird, dass eine Änderung zu einem Feld Zugang der ganze Zugang dazu synchronisieren oder es als flüchtig erklären soll.

öffentliches Klassenbeispiel {\

privater boolean jobInProgress = falsch;

öffentlicher leerer Job {\

synchronisiert (dieser) {\

wenn (jobInProgress) {\

kehren Sie zurück;

}\

jobInProgress = wahr;

}\

//Code, um Job durchzuführen, geht hier

//... }\

Leere jobCompleted {\

synchronisiert (dieser) {\

jobInProgress = falsch;

}\ }\}\</Quelle>.

Siehe auch

  • Lesen Sie und Schreibsperre-Muster
  • Vorsichtiges Suspendierungsmuster

Hierarchisches Besuchermuster / Vorsichtige Suspendierung
Impressum & Datenschutz