


Ausführliche Erläuterung der Java-Entwurfsmuster zum Mediatormuster (Bild)
In diesem Artikel werden hauptsächlich die relevanten Informationen zum Zwischenmuster des Entwurfsmusters ausführlich vorgestellt, die einen bestimmten Referenzwert haben.
Definition: Verwenden Sie ein Vermittlungsobjekt Um eine Reihe von Objektinteraktionen zu kapseln, ermöglicht der Mediator die Interaktion jedes Objekts ohne explizite Interaktion, wodurch die Kopplung gelöst wird und die Interaktion zwischen ihnen unabhängig geändert werden kann.
Typ: Verhaltensmuster
Klassendiagramm:
Mediatormuster Die Struktur von
Das Vermittlermuster wird auch als Vermittlermuster bezeichnet. Aus dem Klassendiagramm ist es in drei Teile unterteilt:
Abstrakter Vermittler: Definition Die Schnittstelle Vom guten Kollegenklassenobjekt zum Vermittlerobjekt wird die Kommunikation zwischen verschiedenen Kollegenklassen verwendet. Enthält im Allgemeinen eine oder mehrere abstrakte Ereignismethoden und wird von Unterklassen implementiert.
Mediator-Implementierungsklasse: Vom abstrakten Mediator geerbt, implementiert im abstrakten Mediator definierte Ereignismethoden. Empfängt Nachrichten von einer Peer-Klasse und wirkt sich dann über die Nachricht auf andere gleichzeitige Klassen aus.
Kollegenklasse: Wenn ein Objekt andere Objekte beeinflusst und auch von anderen Objekten beeinflusst wird, dann werden diese beiden Objekte Kollegenklassen genannt. Im Klassendiagramm gibt es nur eine Kollegenklasse, was eigentlich eine Auslassung der Realität ist. In praktischen Anwendungen bestehen Kollegenklassen im Allgemeinen aus mehreren, die interagieren und voneinander abhängig sind. Je mehr Arten von Kollegen es gibt, desto komplexer wird die Beziehung. Darüber hinaus kann die Kollegenklasse auch als eine Gruppe von Implementierungen dargestellt werden, die dieselbe abstrakte Klasse erben. Im Vermittlermuster müssen Nachrichten zwischen Kollegenklassen über einen Vermittler weitergegeben werden.
Warum das Zwischenmuster verwenden?
Im Allgemeinen ist die Beziehung zwischen Kollegenklassen relativ komplex, und mehrere Kollegenklassen sind manchmal miteinander verbunden Die Beziehung zwischen ihnen erscheint als komplexe Netzwerkstruktur. Dies ist eine überkoppelte Architektur, die der Wiederverwendung von Klassen nicht förderlich ist und instabil ist. In der Abbildung unten gibt es beispielsweise sechs Objekte der Mitarbeiterklasse. Wenn sich Objekt 1 ändert, sind vier Objekte betroffen. Wenn sich Objekt 2 ändert, sind 5 Objekte betroffen. Mit anderen Worten: Das Design der direkten Korrelation zwischen Kollegenklassen ist nicht gut.
Wenn das Vermittlermuster eingeführt wird, wird die Beziehung zwischen Kollegenklassen zu einer Sternstruktur. Wie aus der Abbildung ersichtlich ist, ändert sich jede Klasse wirkt sich nur auf die Klasse selbst und den Mediator aus und verringert so die Kopplung des Systems. Ein gutes Design kapselt nicht die gesamte Verarbeitungslogik für Objektbeziehungen in dieser Klasse, sondern verwendet eine spezielle Klasse, um Verhaltensweisen zu verwalten, die nicht zu Ihnen gehören.
Lassen Sie uns anhand eines Beispiels veranschaulichen, was eine Kollegenklasse ist: Es gibt zwei Klassen A und B. Jede Klasse hat eine Nummer, und die Nummer in Klasse B muss garantiert sein Es ist immer das 100-fache der Zahl in Klasse A. Mit anderen Worten: Wenn Sie eine Zahl in Klasse A ändern, multiplizieren Sie die Zahl mit 100 und weisen Sie sie der Klasse B zu. Wenn Sie Klasse B ändern, teilen Sie die Zahl durch 100 und weisen Sie sie der Klasse A zu. Klasse A und Klasse B interagieren miteinander und werden Co-Klassen genannt. Der Code lautet wie folgt:
abstract class AbstractColleague { protected int number; public int getNumber() { return number; } public void setNumber(int number){ this.number = number; } //抽象方法,修改数字时同时修改关联对象 public abstract void setNumber(int number, AbstractColleague coll); } class ColleagueA extends AbstractColleague{ public void setNumber(int number, AbstractColleague coll) { this.number = number; coll.setNumber(number*100); } } class ColleagueB extends AbstractColleague{ public void setNumber(int number, AbstractColleague coll) { this.number = number; coll.setNumber(number/100); } } public class Client { public static void main(String[] args){ AbstractColleague collA = new ColleagueA(); AbstractColleague collB = new ColleagueB(); System.out.println("==========设置A影响B=========="); collA.setNumber(1288, collB); System.out.println("collA的number值:"+collA.getNumber()); System.out.println("collB的number值:"+collB.getNumber()); System.out.println("==========设置B影响A=========="); collB.setNumber(87635, collA); System.out.println("collB的number值:"+collB.getNumber()); System.out.println("collA的number值:"+collA.getNumber()); } }
Im obigen Code sind Klasse A und Klasse B durch direkte Assoziation miteinander verbunden Muster, Klasse A, Klasse B können nicht direkt miteinander in Beziehung gesetzt werden. Sie müssen über einen Vermittler gehen, um den Zweck der Assoziation zu erreichen.
abstract class AbstractColleague { protected int number; public int getNumber() { return number; } public void setNumber(int number){ this.number = number; } //注意这里的参数不再是同事类,而是一个中介者 public abstract void setNumber(int number, AbstractMediator am); } class ColleagueA extends AbstractColleague{ public void setNumber(int number, AbstractMediator am) { this.number = number; am.AaffectB(); } } class ColleagueB extends AbstractColleague{ @Override public void setNumber(int number, AbstractMediator am) { this.number = number; am.BaffectA(); } } abstract class AbstractMediator { protected AbstractColleague A; protected AbstractColleague B; public AbstractMediator(AbstractColleague a, AbstractColleague b) { A = a; B = b; } public abstract void AaffectB(); public abstract void BaffectA(); } class Mediator extends AbstractMediator { public Mediator(AbstractColleague a, AbstractColleague b) { super(a, b); } //处理A对B的影响 public void AaffectB() { int number = A.getNumber(); 。 B.setNumber(number*100); } //处理B对A的影响 public void BaffectA() { int number = B.getNumber(); A.setNumber(number/100); } } public class Client { public static void main(String[] args){ AbstractColleague collA = new ColleagueA(); AbstractColleague collB = new ColleagueB(); AbstractMediator am = new Mediator(collA, collB); System.out.println("==========通过设置A影响B=========="); collA.setNumber(1000, am); System.out.println("collA的number值为:"+collA.getNumber()); System.out.println("collB的number值为A的10倍:"+collB.getNumber()); System.out.println("==========通过设置B影响A=========="); collB.setNumber(1000, am); System.out.println("collB的number值为:"+collB.getNumber()); System.out.println("collA的number值为B的0.1倍:"+collA.getNumber()); } }
Obwohl der Code relativ lang ist, ist er dennoch relativ einfach zu verstehen. Tatsächlich handelt es sich um eine Neukapselung des ursprünglichen Codes Objektbeziehungen in eine Zwischenklasse umwandeln. Die Beziehung zwischen Objekten wird über diese Zwischenklasse abgewickelt.
Vorteile des Vermittlermusters
Durch die ordnungsgemäße Verwendung des Vermittlermusters kann eine übermäßige Kopplung zwischen Kollegenklassen vermieden werden, wodurch jede Kollegenklasse getrennt werden kann relativ unabhängig genutzt werden.
Die Verwendung des Vermittlermusters kann die Eins-zu-Viele-Assoziation zwischen Objekten in eine Eins-zu-Eins-Assoziation umwandeln, wodurch die Beziehung zwischen Objekten leicht zu verstehen und aufrechtzuerhalten ist.
Die Verwendung des Mediatormusters kann das Verhalten und die Zusammenarbeit von Objekten abstrahieren und die Interaktion zwischen Objekten flexibler handhaben.
Anwendbare Szenarien
Bei der objektorientierten Programmierung weist eine Klasse zwangsläufig Abhängigkeiten von anderen Klassen auf, und völlig unabhängige Klassen sind bedeutungslos. Es ist auch durchaus üblich, dass eine Klasse gleichzeitig von mehreren Klassen abhängt. Da eine solche Situation vorliegt, bedeutet dies, dass die Eins-zu-Viele-Abhängigkeitsbeziehung ihre Rationalität haben kann Objektbeziehung klar, aber wenn Missbrauch kann den gegenteiligen Effekt haben. Im Allgemeinen wird das Vermittlermuster nur für Beziehungen mit einer Netzwerkstruktur zwischen Mitarbeiterklassen in Betracht gezogen. Sie können die Netzwerkstruktur in eine Sternstruktur ändern, um die Beziehung zwischen den Klassen klarer zu machen.
Das Vermittlermodell ist ein häufig verwendetes Modell und kann auch leicht missbraucht werden. In den meisten Fällen ist die Beziehung zwischen Kollegenklassen nicht so kompliziert wie eine chaotische Netzwerkstruktur. Daher ist es in den meisten Fällen nicht erforderlich, einen Vermittler einzuführen Modus. Der Missbrauch des Vermittlermodells wird die Sache nur noch komplizierter machen.
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Java-Entwurfsmuster zum Mediatormuster (Bild). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

PHP und Python haben jeweils ihre eigenen Vorteile, und die Wahl sollte auf Projektanforderungen beruhen. 1.PHP eignet sich für die Webentwicklung mit einfacher Syntax und hoher Ausführungseffizienz. 2. Python eignet sich für Datenwissenschaft und maschinelles Lernen mit präziser Syntax und reichhaltigen Bibliotheken.

PHP ist eine Skriptsprache, die auf der Serverseite weit verbreitet ist und insbesondere für die Webentwicklung geeignet ist. 1.PHP kann HTML einbetten, HTTP -Anforderungen und Antworten verarbeiten und eine Vielzahl von Datenbanken unterstützt. 2.PHP wird verwendet, um dynamische Webinhalte, Prozessformdaten, Zugriffsdatenbanken usw. mit starker Community -Unterstützung und Open -Source -Ressourcen zu generieren. 3. PHP ist eine interpretierte Sprache, und der Ausführungsprozess umfasst lexikalische Analyse, grammatikalische Analyse, Zusammenstellung und Ausführung. 4.PHP kann mit MySQL für erweiterte Anwendungen wie Benutzerregistrierungssysteme kombiniert werden. 5. Beim Debuggen von PHP können Sie Funktionen wie error_reporting () und var_dump () verwenden. 6. Optimieren Sie den PHP-Code, um Caching-Mechanismen zu verwenden, Datenbankabfragen zu optimieren und integrierte Funktionen zu verwenden. 7

Java ist eine beliebte Programmiersprache, die sowohl von Anfängern als auch von erfahrenen Entwicklern erlernt werden kann. Dieses Tutorial beginnt mit grundlegenden Konzepten und geht dann weiter zu fortgeschrittenen Themen. Nach der Installation des Java Development Kit können Sie das Programmieren üben, indem Sie ein einfaches „Hello, World!“-Programm erstellen. Nachdem Sie den Code verstanden haben, verwenden Sie die Eingabeaufforderung, um das Programm zu kompilieren und auszuführen. Auf der Konsole wird „Hello, World!“ ausgegeben. Mit dem Erlernen von Java beginnt Ihre Programmierreise, und wenn Sie Ihre Kenntnisse vertiefen, können Sie komplexere Anwendungen erstellen.
