Код переписан на использовании паттерна стратегя