Приветствую всех, сегодня я затрону тему об агрегации, что это такое и рассмотрим пример использования.
Применение, суть его в том что бы расширить функциональность имеющего класса, будь он вашим или чужим, знаетели вы он нем что то или нет. Агрегация позволит избежать избыточного кода и работать с методами и классами.
Агрегация и композиция очень близкие понятия, за исключением того что композиция имеет частный случай. В обоих случаях есть объект-контейнер и объект-содержимое этого контейнера. Объект-содержимое, как привило является полем объекта-контейнера. Но в тоже время, между композицией и агрегацией есть одно важное отличие: при использовании композиции, объект-содержимое не может существовать без своего контейнера, а случае агрегации, такое вполне возможно. Да еще и при использовании агрегации, объект-содержимое может принадлежать даже нескольким контейнерам (но тут нужно быть осторожным) или у одного объекта-контейнера, в течении «жизни», может быть разное содержимое (причем, агрегация позволяет использовать даже содержимое разных типов одном у тому же контейнеру).
Пример агрегирования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
//Класс, отправляющий данные class Sender { public void Send(byte[] aData) { //Отправка данных } //Поля класса, для хранения настроек и прочего } //Класс, отправляющий данные, сжимая их перед отправкой class SenderM { //Конструктор public SenderM(Sender aSender) { sender = aSender; } //Модифицированный метод отправки (предварительно сжимающий данные) public void SendM(byte[] aData) { //Сжимаем данные aData //Отправляем данные (вызывая метод базового класса) sender.Send(aData); } //Ссылка на объект класса Sender private Sender sender; //Какие-то другие поля класса... } |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//Создаем объект, который будет частью другого Sender tmpSender = new Sender(); //Создаем объект-контейнер SenderM mainSender = new SenderM(tmpSender); //Какие-то данные byte[] someData = new byte[512]; //Какое-то заполнение данных... //Отправка уже данных со сжатием mainSender.SendM(someData); |