Quello che stai guardando nel primo diagramma è come le classi AWT in Java usano il Pattern composito in modo che sono in grado di comporre insieme elementi in un elemento più grande dello stesso tipo. Il secondo diagramma mostra la forma generalizzata del Pattern composito.
Il modello composito
Per comprendere il modello composito, utilizziamo un esempio più concreto per una prospettiva migliore. Innanzitutto, abbiamo una super classe (potrebbe anche essere un'interfaccia) Vehicle
per le cose che guidano sulla strada, come automobili, camion, 18 ruote, ecc:
public abstract class Vehicle
{
public void drive(int distance) {
System.out.println("Drove " + distance + ". Vroom vroom!");
}
public abstract int getWeight();
// etc.
}
Ora abbiamo anche una lezione concreta per una macchina:
public class Car extends Vehicle
{
protected int weight;
// ...
@Override
public int getWeight() {
return this.weight;
}
}
Abbiamo anche una classe per un corriere auto , che è un veicolo che può contenere altri veicoli:
public class CarCarrier extends Vehicle
{
protected int weight;
protected Vehicle[] cars;
// ...
@Override
public int getWeight() {
int weight = this.weight;
for(Vehicle car : cars) {
weight += car.getWeight();
}
return weight;
}
}
Come possiamo vedere nel metodo getWeight
di CarCarrier
, dobbiamo calcolare il peso del corriere come peso più il peso delle vetture che trasporta . Pertanto, il metodo getWeight
di CarCarrier
chiama il metodo getWeight
di ciascun figlio Vehicles
nell'array cars
. La classe Car
corrisponde alla foglia e la classe CarCarrier
corrisponde al composito.
La formula sopra riportata, che descrive come dovrebbe funzionare il metodo operation
del composito, si traduce fondamentalmente in "per ogni bambino, lo chiameremo ' o
', nei bambini, dobbiamo chiamare il metodo operation
su o
quando viene chiamato il metodo operation
del composito. " Questo corrisponde al modo in cui abbiamo chiamato il metodo getWeight
di ognuno dei Vehicles
trasportato dal CarCarrier
per ottenere il peso totale del CarCarrier
.