Decorator pattern with a builder in a booking application
You can possibly try Domain Events. Or just Event Broker patterns?

What I usually use is something like this:

static class Event
{
   public static void Raise&lt;T&gt;(this T e) ...
}    

interface IHandler&lt;T&gt;
{
   void Handle&lt;T&gt;(T e);
}


So I can define in my code:

class OrderCancelled
{
   public OrderCancelled(int orderId) ...
   public int OrderId { get; }
} 

class MoneyReturn : IHandler&lt;OrderCancelled&gt; ...
class LastOfferSender : IHandler&lt;OrderCancelled&gt; ...
etc...


My IoC container was setup to construct and invoke a transient instances of all implementations of IHandler&lt;T&gt; on a T event raising.

new OrderCancelled(id).Raise();


You can chain events.