Query su composizione ricorsiva

1

Per la relazione sottostante tra Container e Component in java.awt gerarchia di classi, vedo che,

oltreallarelazioneis-a,classContainerhaunarelazionecompositaconclassComponentconsottolarigadicodice,

/***Thecomponentsinthiscontainer.*@see#add*@see#getComponents*/privatejava.util.List<Component>component=newjava.util.ArrayList<Component>();

Manonsonoancorachiaroconilseguentediagrammawrtoperation()method.

Quindi,

1) Cosa significa class Leaf e class Composite nel diagramma sottostante?

2) Che cosa stiamo descrivendo esattamente sul metodo operation() in class Leaf e class Composite come da diagramma sottostante?

Nota: I java beginner learning java

    
posta overexchange 29.11.2014 - 01:34
fonte

2 risposte

2

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.

foreach o in children, o.operation()

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 .

    
risposta data 29.11.2014 - 07:38
fonte
0

Il modello composito coinvolge un genitore che ha un insieme di oggetti figlio (tutti i bambini e il genitore hanno qualche interfaccia o superclasse in comune) e una (o più) operazioni che vengono implementate delegando alla stessa operazione nei bambini , potenzialmente con alcune operazioni aggiuntive eseguite anche.

Nel caso di Component, le operazioni delegate sono la gestione degli eventi, la pittura e così via. Ad esempio, l'implementazione della vernice consiste nel ricorrere ai bambini, regolare l'origine e la regione di ritaglio dell'oggetto Graphics per ciascuno e chiamare il relativo metodo paint.

    
risposta data 29.11.2014 - 08:49
fonte

Leggi altre domande sui tag