Distinguindo entre delegação, composição e agregação (Java OO Design)

Eu estou enfrentando um problema contínuo distinguindo delegação, composição e agregação de um ao outro, e identificando os casos em que é melhor usar um sobre o outro.

Eu consultei um livro de Análise e Design Java OO, mas minha confusão ainda permanece. A principal explicação é esta:

Delegação: Quando meu objeto usa a funcionalidade de outro objeto como está sem alterá-lo.

Composição: Meu objeto consiste em outros objetos que, por sua vez, não podem existir depois que meu objeto é destruído - o lixo é coletado.

Agregação: Meu objeto consiste em outros objetos que podem viver mesmo depois que meu objeto é destruído.

É possível ter alguns exemplos simples demonstrando cada caso e o raciocínio por trás deles? De que outra forma esses exemplos podem ser demonstrados além do meu objeto simplesmente tendo uma referência a outro (s) objeto (s)?

questionAnswers(4)

yourAnswerToTheQuestion