设计模式 - 事件和通知

So I'm looking for a pattern that might help me to solve my problem. it's related to events, and notifications. It goes something like this:

in this case management system, at various points along the workflow, events will be triggered that will require I notify the team members that belong to the instance of that workflow. examples:

  • boss please reassign this case
  • bla was approved, begin working on this case
  • I'm going on vacation, notify my delegate that all my cases are his!

Members in the system can "opt-in" to different forms of notification like email, sms, messenger via their account profile. One user may have multiple notification types they've elected to use.

the structure I'm hoping to use is to have a standard interface for the various notification managers

$smsNotificationManager->notify(Event $event, Array $users)
$emailNotificationManager-notify(Event $event, Array $users)
$messangerNotificationManager-notify(Event $event, Array $users)

Events would be passed to an event handler that would - as one of its tasks - engage the notification handler to notify the member(s)that event occurred. The Notification handler would be responsible for having each specific Notification manager sort out how to notify the people that subscribed to their notifications.

I'm sure there is pattern that I could leverage here. The event will identify people who would need to be notified. The Event Handler shouldn't be concerned with how to notify them.

The notification handler should be able to sort out what types of notifications are available, and figure out how to pass to each manager the event, and all the subscribers.

I'd be adding support for new notification types in the future too. So i'm a bit unclear as to best practices regarding whether or not I should encapsulate the notification types elsewhere, or implement concrete references in the notification handler, Have it sort users, by subscription, set up some case logic in the notification handler and and pass each notification manager the list of users, and the event.

is there an obvious pattern to model this after. Any guidance best practice welcome!