Реакция на изменение состояния объекта
А чем приведенное решение неправильно? Замените calculateCarCost на какое-нибудь updateObject и получите примерно то, что обычно и делают в такой ситуации.
Наверное, стоит узнать про [google]Паттерны проектирования[/google]. В данном случае подходит вот этот: Observer