реализован паттерн observer