Rozszerza klasę o obiekt „null”. Dzięki takiemu rozwiązaniu można uniknąć uciążliwego sprawdzania czy dany obiekt nie jest pusty (null).

Klasa NullEmployee implementuje wszystkie metody interfejsu IEmployee, zastępując je wersjami niepodejmującymi żadnych działań. Warto zwrócić uwagę na zmienną statyczną NULL, która reprezentuje jedyną instancję zagnieżdżonej implementacji NullEmployee. Dzięki takiemu rozwiązaniu mamy gwarancję stworzenia tylko 1 instancji. Możemy więc korzystać z wyrażenia warunkowego: if (e == Employee.NULL) …..

public interface IEmployee {
    bool IsTimeToPay(DateTime time);
    void Pay();
}

public abstract class Employee:IEmployee
{
  public abstract bool IsTimeToPay(DateTime time);
  public abstract void Pay();
  public static readonly Employee NULL = new NullEmployee();

  private class NullEmployee : Employee
  {
    public override bool IsTimeToPay(DateTime time)
    {
      return false;
    }

    public override void Pay()
    {
    }
  }
}