Définition (Encyclopédie Baidu) :
Combine des objets dans une structure arborescente pour représenter une structure hiérarchique de « partie-tout ». Le modèle de composition permet aux utilisateurs d'utiliser des objets uniques et des objets composites de manière cohérente.
Diagramme de classes UML :
Code spécifique :
public class Client {public static void main(String[] args) throws UnmarshalException { Component root = new Composite(); Component c1 = new Composite(); Component c2 = new Composite(); Component leaf1 = new Leaf(); Component leaf2 = new Leaf(); Component leaf3 = new Leaf(); root.add(c1); root.add(c2); root.add(leaf1); root.add(leaf2); root.add(leaf3); Component o = root.get(0); o.operation(); Component o1 = root.get(1); o1.operation(); Component o2 = root.get(2); o2.operation(); } }public abstract class Component {abstract void operation();void add(Component c) throws UnmarshalException { throw new UnmarshalException("不支持"); }void remove(Component c) throws UnmarshalException {throw new UnmarshalException("不支持"); } Component get(int index) throws UnmarshalException {throw new UnmarshalException("不支持"); } }public class Composite extends Component { List<Component> list = null; @Overridevoid operation() { System.out.println("Composite"); if (!CollectionUtil.isEmpty(list)) { for (Component c : list) { c.operation(); } } } @Overridevoid add(Component c) throws UnmarshalException {if (CollectionUtil.isEmpty(list)) { list = new ArrayList<>(); } list.add(c); } @Overridevoid remove(Component c) throws UnmarshalException {if (!CollectionUtil.isEmpty(list)) { list.remove(c); } } @Override Component get(int index) throws UnmarshalException {if (!CollectionUtil.isEmpty(list)) { return list.get(index); }return null; } }public class Leaf extends Component { @Overridevoid operation() { System.out.println("叶子节点操作"); } }
Description du module :
Composant (composant abstrait) :
Le composant est une classe abstraite déclarée par les objets de la composition. Dans des circonstances appropriées, il implémente le comportement par défaut de l'interface commune à toutes les classes. Utilisé pour accéder et gérer les sous-composants du composant.
Composite (composant conteneur) :
Définir le comportement du nœud de branche, utilisé pour stocker les sous-composants, et implémenter les opérations liées aux sous-composants dans l'interface du composant, telles que l'ajout (ajouter) et la suppression (supprimer), etc. .
Leaf (composant Feuille) :
Leaf représente un objet nœud feuille dans une combinaison. Un nœud feuille n'a pas de nœuds enfants
Exemple spécifique :
Prenez un client de nouvelles. Les exemples incluent la classification des menus, la classification de l'organisation des départements, la classification des départements de l'entreprise, etc.Scénarios d'application : Décrire la structure arborescente, qui peut faire fonctionner uniformément tous les nœuds de l'arborescence, ajouter des suppressions et des acquisitions, etc.
Avantages et inconvénients : Avantages :
Contient une structure hiérarchique d'objets de base et d'objets composites
Simplifie les appels clients et il n'est pas nécessaire de différencier les compositions et sous-feuilles.
Des cotylédons peuvent être ajoutés pour augmenter l'évolutivité.
La sécurité et la transparence sont des contradictions irréconciliables. Bien entendu, ce mode implémente plus de transparence et traite les cotylédons et les composants de la même manière
De cette façon, il devient très difficile de gérer séparément les cotylédons relatifs et les objets composites, et une conversion de type est nécessaire, ce qui affecte évidemment la sécurité.
De plus, à mesure que le métier devient de plus en plus complexe, l'abstraction des composants constitue également un défi de taille.
Résumé : Unification des opérations des cotylédons et des objets combinés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!