Zusammengesetzte Definition: Organisieren Sie Objekte in einer Baumstruktur, um eine "Teil-Total" -Hierarchie zu erreichen, damit der Client einzelne Objekte und kombinierte Objekte konsistent verwendet.
Composite ist leichter zu verstehen. Diese Objekte in der Zusammensetzung haben eine gemeinsame Schnittstelle. Es kann beschrieben werden, als hundertzüge zu ziehen.
Daher verwendet der zusammengesetzte Modus den Iteratormodus, der der Kette des Verantwortungsmodus ähnelt.
Zusammengesetzte Vorteile:
1. Machen Sie Client -Anrufe einfach, und der Client kann eine Kombinationsstruktur oder ein einzelnes Objekt konsistent verwenden. Code.
2. Es ist einfacher, Objektteile in den Kombinationskörper hinzuzufügen. Der Client muss den Code nicht ändern, da er eine neue Objektkomponente hinzugefügt hat.
Wie man Composite verwendet
Definieren Sie zunächst eine Schnittstelle oder abstrakte Klasse. Verwaltung von zusammengesetzten Kompositionen (oder Komponentenkomponenten).
Der folgende Code wird als abstrakte Klasse definiert und versucht im Allgemeinen, die Schnittstelle so weit wie möglich zu verwenden.
Die Codekopie lautet wie folgt:
öffentliche abstrakte Klassenausrüstung {
privater Zeichenfolge Name;
// Internetpreis
öffentliches abstraktes Doppel -NetPrice ();
// Rabattpreis
öffentliches abstraktes Doppel -DiscountPrice ();
// Teilenmethode hinzufügen
public boolean add (Ausrüstung) {return false;
// Teilmethode löschen
public boolean entfernen (Ausrüstung) {Return Falsch;
// Beachten Sie hier, hier finden Sie eine Methode zum Zugriff auf Komponentenklassen.
public iterator iter () {return null;
öffentliche Ausrüstung (endgültiger String -Name) {this.name = name;
}
Die abstrakte Klassenausrüstung ist die Definition der Komponente, die die Objekte der Verbundklasse darstellt, und in den Geräten werden mehrere gängige Methoden definiert.
Die Codekopie lautet wie folgt:
öffentliche Klassendiskette erweitert die Ausrüstung {
Public Disk (String Name) {Super (Name);
// Definieren Sie den Disk -Netzwerkpreis auf 1
public double netprice () {return 1.;}
// Definieren Sie den Scheibenrabattpreis von 0,5% Rabatt.
public Double DiscountPrice () {Return .5;
}
Die Festplatte ist ein Objekt oder eine Komponente im Kombinationskörper, das ein einzelnes Element ist (primitiv).
Eine andere Möglichkeit ist, dass eine Komponente auch eine Kombination ist, dh unter dieser Komponente ist ein „Sohn“. Jetzt müssen wir diese Kombination definieren:
Die Codekopie lautet wie folgt:
Abstract Class CompositeEquipment erweitert die Ausrüstung {
private int i = 0;
// Definieren Sie einen Vektor, um "Sohn" zu speichern
private LSIT -Ausrüstung = new ArrayList ();
public compositeEquipment (String name) {Super (Name);
public boolean add (Ausrüstung Ausrüstung) {
this.equipment.add (Ausrüstung);
zurückkehren;
}
public double netprice () {
double netprice = 0.;
Iterator iter = Equipment.iterator ();
für (iter.hasnext ())
netprice+= ((Ausrüstung) iter.next ()). netprice ();
Netzen zurückgeben;
}
public Double DiscountPrice () {
double DiscountPrice = 0.;
Iterator iter = Equipment.iterator ();
für (iter.hasnext ())
DiscountPrice+= ((Ausrüstung) iter.Next ()). DiscountPrice ();
Rückgabeabzug;
}
// Beachten Sie hier, hier finden Sie eine Methode zum Zugriff auf Komponenten in Ihrer eigenen Kombination.
// Der Grund, warum die obige Festplatte nicht existiert, ist, dass die Festplatte ein einzelnes Element ist.
public iterator iter () {
return equice.iterator ();
}
// Überlastung der Iteratormethode
public boolean hasNext () {return i <Equipment.size ();
// Überlastung der Iteratormethode
öffentliches Objekt Next () {
if (hasNext ())
return equipment.elementat (i ++);
anders
neue NoSuchelementException () werfen;
}
}
Das obige Verbundgeräte erbt die Geräte und bietet externe Zugriffsmethoden für die darin enthaltenen Objekte. Überlastung Iterator ist eine Schnittstelle der Java -Sammlung und eine Implementierung des Iteratormusters.
Schauen wir uns die beiden spezifischen Kategorien von Compoundequipment an: Disk -Box -Chassis und Kastenschrank. Box wie Festplattenfloppy -Laufwerk usw. Zweifellos sind beide Kombination.
Die Codekopie lautet wie folgt:
Das Gehäuse der öffentlichen Klassen erweitert CompositeEquipment {
öffentliches Chassis (String -Name) {Super (Name);
public double netprice () {return 1.+super.netprice ();
public Double DiscountPrice () {return .5+Super.DiscountPrice ();
}
Das Kabinett der öffentlichen Klasse erweitert CompositeEquipment {
öffentliches Kabinett (String -Name) {Super (Name);
public double netprice () {return 1.+super.netprice ();
public Double DiscountPrice () {return .5+Super.DiscountPrice ();
}
Bisher haben wir die Architektur des gesamten Verbundmodells abgeschlossen.
Wir können uns den Code des Client Calls Compose ansehen:
Die Codekopie lautet wie folgt:
Kabinettschrank = neuer Kabinett ("Tower");
Chassis Chassis = neues Chassis ("PC -Chassis");
// PC -Chassis in den Turm einfügen (packen Sie die Festplatte in die Box).
Cabinet.Add (Chassis);
// Fügen Sie eine 10 -GB -Festplatte in das PC -Chassis ein (installieren Sie die Festplatte in der Festplattenbox).
Chassis.Add (neue Festplatte ("10 GB");
// die Methode netprice () aufrufen;
System.out.println ("netprice ="+cabinet.netprice ());
System.out.println ("DiscountPrice ="+cabinet.discountPrice ());
Die oben genannten Methoden sind NetPrice () oder DiscountPrice ().
Composite ist ein sehr cleveres Modell, das Weisheit verkörpert.
Wenn Sie das Forum nutzen, gibt es in einer Version (Forum) viele Beiträge (Nachrichten). Also betreten wir Jive, wie es implementiert wird.
Jive -Anatomie
In Jive ist ForumThread ein Containerbehälter (Kombination) von Voraussetzungen. Das heißt, ForumThread ähnelt der Zusammensetzung in unserem vorherigen Beispiel.
Die Codekopie lautet wie folgt:
[Faden]
|- [Nachricht]
|- [Nachricht]
|- [Nachricht]
|- [Nachricht]
|- [Nachricht]
Wir sehen den folgenden Code in ForumThread:
Die Codekopie lautet wie folgt:
öffentliche Schnittstelle ForumThread {
....
Öffentliche Leere AddMessage (Voraussetzung für Elternschaft, Voraussetzung Newmessage)
wirft nicht autorisierte Ausnahme aus;
Öffentliche Löschung Löschung (Voraussetzung)
wirft nicht autorisierte Ausnahme aus;
öffentliche Iterator -Nachrichten ();
....
}
Ähnlich wie bei CompositeEquipment bietet es Methoden zum Zugriff auf Komponenten in Ihrem eigenen Kombinationskörper: Hinzufügen, Löschen und Durchlaufen.
Basierend auf meiner Analyse von Jive in anderen Modellen haben wir den Rahmen des Jive -Forumssystems im Grunde genommen verstanden. .