Реализуйте систему для управления и отправки сообщений в мессенджере. В мессенджере существует несколько типов сообщений: текстовые, мультимедийные и системные уведомления. Каждый тип сообщения имеет как уникальные свойства, так и одинаковое поведение
Ваша задача — реализовать структуры сообщений с использованием таких концепций ООП, как интерфейсы, встраивание типов, модификаторы доступа, приведение типов.
Детали реализации логики должны быть скрыты от ее потребителя и доступны через отдельное API (методы/функции)
-
Типы сообщений
- Текстовые
Текстовое сообщение от {{логин отправителя}} отправлено в {{время отправления}}: {{текст сообщения}}- Отправляется
конкретному пользователю
- Мультимедийные
Мультимедийное сообщение от {{логин отправителя}} отправлено в {{время отправления}}: [{{тип медиа}}] {{URL медиа}}- Типы медиа:
аудио,видео - Отправляется
конкретному пользователю
- Системные
Системное уведомление отправлено в {{время отправления}}: {{текст сообщения}}- Отправляется
всем пользователямв системе
- У каждого сообщения есть свой
идентификатор
- Текстовые
-
Создать структуру
пользователя, у которого имеетсялогинисписок сообщений- В системе будет храниться единый
список пользователей - Все изменения сообщений должны происходить
- В системе будет храниться единый
-
Создать сервис
Отправитель сообщений, в котором будет хранитсясписок пользователей- Добавить ему метод
отправки сообщений, который принимаетсообщения - В зависимости от типа сообщения (см. выше) сервис будет добавлять его одному или нескольким пользователям в системе
- Добавить ему метод
-
Создать сервис
Редактор сообщений, в котором будет хранитсясписок пользователей- Реализовать метод
редактирования сообщения, который редактирует существующее в системесообщениеу пользователя - Редактировать можно текстовые значения сообщений (системные и тестовые сообщения) или урл медиа (менять тип медиа нельзя)
- Реализовать метод
-
Создать сервис
Принтер сообщений, который печатает сообщения (формат см. выше) для каждого пользователя- Печать должна осуществляться во все, куда можно писать данные (терминал, файл, ...)
-
Структура
- Вся логика должна находится в
internal - Демонстрация всех сценариев использования в точке входа в приложение
- Сущности должны располагаться отдельно от логики сервисов
- Вся логика должна находится в
-
Добавление новых типов сообщений должно минимально затрагивать код сервисов