Heim  >  Artikel  >  Java  >  Ausführliche Erläuterung der Java-Entwurfsmuster zum Mediatormuster (Bild)

Ausführliche Erläuterung der Java-Entwurfsmuster zum Mediatormuster (Bild)

黄舟
黄舟Original
2017-08-11 10:03:191098Durchsuche

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:

20162593206564.jpg (526×202)

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.

20162593302973.jpg (431×252)20162593327585.jpg (419×251)

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.

20162593346671.jpg (427×357)

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!

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