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