2011-01-15 41 views

risposta

20

Immaginate di avere le classi Car e Engine:

public class Car { 
    private Engine engine = new Engine(); //or inject it externally 

    public void start() { 
     engine.start(); 
    } 
} 

In questo esempio i Car delegati al sottostante Engine. L'utente dell'auto non può avviare direttamente il motore (a meno che non sia un meccanico). Ma può dire alla macchina di iniziare, e l'auto a sua volta dice al motore di iniziare.

Si vorrebbe usarlo ogni volta che si utilizza la composizione dell'oggetto e si deve utilizzare un metodo di uno degli oggetti di composizione. In tal caso, crei un metodo che lo deleghi.

+1

+1 Per estendere questo. L'ereditarietà fa anche delega, implicitamente al/ai genitore/i. Quello che descrivi sopra è una delega esplicita. – jer

+0

@jer Penso che l'ereditarietà non faccia la delega. La delega sta gestendo la responsabilità di qualche altro oggetto. L'altro oggetto può essere della stessa classe o di una classe totalmente diversa. Mentre in caso di ereditarietà, ogni oggetto condivide lo stesso insieme di metodi. – nktsg

Problemi correlati