Какой из следующих подходов наиболее эффективно помогает избежать нарушения принципа Open/Closed Principle при добавлении нового функционала?