Разница между композицией и агрегацией заключается в том, что в случае композиции целое явно контролирует время жизни своей составной части (часть не существует без целого), а в случае агрегации целое хоть и содержит свою составную часть, время их жизни не связано (например, составная часть передается через параметры конструктора).
|
|
class CompositeCustomService{ // Композиция private CustomRepository repository = new CustomRepository(); public void DoSomething(){ // Используем repository } } |
|
|
class AggregatedCustomService{ // Агрегация private AbstractRepository repository; public AggregatedCustomService(AbstractRepository repository){ this.repository = repository; } public void DoSomething(){ // Используем repository } } |
CompositeCustomService для управления своими составными частями использует композицию, аAggregatedCustomService – агрегацию. При этом явный контроль времени жизни обычно приводит к более высокой связанности между целым и частью, поскольку используется конкретный тип, тесно связывающий участников между собой.
Продолжение следует…