использован паттерн Command