Первое , что пришло в голову:
1. Создать класс Notify, где записываются данные(куда отправлять, что отправлять и т.д.)
2. Создаем интерфейс ISender, с единственным методом send(Notify $notify)
.
3. Создаем разные классы для разных отправщиков - sms, email и т.д. и реализуем интерфейс из 2 пункта.
4. Можно создать фабричный класс/метод, куда передаем тип , который выбрал пользователь , а он возвращает нужный класс , либо просто через if/switch проверяете и создаете нужный класс(SmsSender, EmailSender и т.д.).
5. Т.к. все наши Sender-ы реализуют один и тот же интерфейс, то тупо вызываем метод send и передаем ему объект $notify
Это первое, что пришло в голову, уверен есть еще десятки разных вариантов