Définition composite: organisez des objets dans une structure d'arbre pour obtenir une hiérarchie "partielle-totale", afin que le client utilise une utilisation cohérente d'objets individuels et d'objets combinés.
Le composite est plus facile à comprendre. Ces objets dans le corps de composition ont une interface commune. Il peut être décrit comme tirant une centaine de mouvements.
Par conséquent, le mode composite utilise le mode itérateur, qui est similaire au mode chaîne de responsabilité.
Avantages composites:
1. Remplissez les appels du client et le client peut utiliser une structure combinée ou un seul objet de manière cohérente. code.
2. Il est plus facile d'ajouter des parties d'objet dans le corps combiné. Le client n'a pas à modifier le code car il a ajouté un nouveau composant d'objet.
Comment utiliser composite
Tout d'abord, définissez une interface ou une classe abstraite. Gérer les compositions composites.
Le code suivant est défini comme une classe abstrait et essaie généralement d'utiliser autant que possible l'interface.
La copie de code est la suivante:
Équipement de classe abstrait public {
nom de chaîne privé;
// prix Internet
Résumé public Double Netprice ();
// prix de réduction
Public Résumé Double DiscountPrice ();
// Ajouter la méthode des pièces
Public Boolean Add (équipement d'équipement) {return false;}
// Supprimer la méthode des pièces
Public Boolean Supprimer (équipement d'équipement) {return false;};
// Remarque Ici, voici une méthode pour accéder aux classes de composants.
iterator public iter () {return null;}
Équipement public (nom de chaîne finale) {this.name = name;};
}
L'équipement de classe abstrait est la définition du composant, représentant les objets de la classe composite, et plusieurs méthodes courantes sont définies dans l'équipement.
La copie de code est la suivante:
Le disque de classe publique étend l'équipement {
Disque public (nom de chaîne) {super (nom);}
// définir le prix du réseau de disque à 1
public double netprice () {return 1.;
// Définir le prix de réduction du disque est de 0,5% de réduction.
Double remise public () {return .5;}
}
Le disque est un objet, ou un composant, dans le corps combiné, qui est un seul élément (primitif).
Une autre possibilité est qu'un composant est également une combinaison, c'est-à-dire qu'il y a un «fils» sous ce composant. Maintenant, nous devons définir cette combinaison:
La copie de code est la suivante:
classe abstraite composite Elequipment étend l'équipement {
privé int i = 0;
// définir un vecteur pour stocker «fils»
Équipement LSIT privé = new ArrayList ();
Public CompositeEamipment (nom de chaîne) {super (nom);
Add booléen public (équipement d'équipement) {
this.equipment.add (équipement);
Retour Vrai;
}
public double netprice () {
double netprice = 0.;
Iterator iter = equipment.iterator ();
pour (iter.hasnext ())
netprice + = ((équipement) iter.next ()). netprice ();
retour netprice;
}
public Double DiscountPrice () {
Double DiscountPrice = 0.;
Iterator iter = equipment.iterator ();
pour (iter.hasnext ())
DiscountPrice + = ((équipement) iter.Next ()). DiscountPrice ();
Retour DowtPrice;
}
// Remarque Ici, voici une méthode pour accéder aux composants dans votre propre combinaison.
// La raison pour laquelle le disque ci-dessus n'existe pas est que le disque est un seul élément.
iterator public iter () {
RETOUR ÉQUIPEMENT.ITERATOR ();
}
// surcharger la méthode itérateur
public boolean hasnext () {return i <equipment.size ();
// surcharger la méthode itérateur
objet public suivant () {
if (hasnext ())
RETOUR ÉQUIPEMENT.ELlementAT (I ++);
autre
lancer un nouveau nosuchementElementException ();
}
}
L'équipement composite ci-dessus hérite de l'équipement et fournit des méthodes d'accès externes pour les objets à l'intérieur, en surchargeant l'itérateur.
Jetons un coup d'œil aux deux catégories spécifiques de l'équilibre composite: châssis de boîte à disque et armoire de boîte. Boîte, comme le lecteur de disquette à disque dur, etc. Sans aucun doute, les deux sont combinés.
La copie de code est la suivante:
La classe publique Châssis étend Composite Eequipment {
Châssis public (nom de chaîne) {super (nom);
public double netprice () {return 1. + super.netprice ();
public Double DiscountPrice () {return .5 + super.discountprice ();
}
Cabinet de classe publique étend composite Eequipment {
Cabinet public (nom de chaîne) {super (nom);
public double netprice () {return 1. + super.netprice ();
public Double DiscountPrice () {return .5 + super.discountprice ();
}
Jusqu'à présent, nous avons terminé l'architecture de l'ensemble du modèle composite.
Nous pouvons consulter le code du Client Calling Compose:
La copie de code est la suivante:
Armoire à armoire = nouvelle armoire ("tour");
Châssis châssis = nouveau châssis ("châssis PC");
// insérer le châssis PC dans la tour (emballez le disque dans la boîte)
armoire.add (châssis);
// Insérez un châssis du disque dur de 10 Go au PC (installez le disque dur dans la boîte de disque)
chassis.add (nouveau disque ("10 Go"));
// appelle la méthode netprice ();
System.out.println ("netprice =" + armoiret.netprice ());
System.out.println ("DiscountPrice =" + Cabinet.DiscountPrice ());
Les méthodes appelées ci-dessus sont NetPrice () ou DiscountPrice ().
Le composite est un modèle très intelligent qui incarne la sagesse.
En prenant le forum comme exemple, il y a de nombreux messages (messages) dans une version (forum). , nous entrons donc à Jive, jetez un œil à la façon dont il est mis en œuvre.
Anatomie jive
Dans Jive, Forumthread est un conteneur de conteneur (combinaison) de forumsages. C'est-à-dire que Forumthread est similaire à l'équipage composite dans notre exemple précédent.
La copie de code est la suivante:
[fil de discussion]
| - [message]
| - [message]
| - [message]
| - [message]
| - [message]
Nous voyons le code suivant dans Forumthread:
La copie de code est la suivante:
Interface publique Forumthread {
....
AddMessage du public public (Forumssage ParentMessage, Forumssage NewMessage)
lance UnauthorizedException;
Public Void Deletemessage (ForumMessage Message)
lance UnauthorizedException;
Public Iterator messages ();
....
}
Semblable à Composite Eleam, il fournit des méthodes pour accéder aux composants dans votre propre corps combiné: l'ajout, la suppression et la traversée.
Sur la base de mon analyse de Jive dans d'autres modèles, nous avons essentiellement compris le cadre du système de forum Jive. .