0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Этот объект нужен для каких-то дополнительных действий когда происходит взаимодействие с любым объектом. В прокси существуют несколько обработчиков-ловушек, которые срабатывают при определённых событиях. Самые популярные среди них это get и set, которые срабатывают соответственно при получении свойства объекта и при установке нового значения в свойство объекта. На эти ловушки можно повесить свои обработчики.</p>
1
<p>Этот объект нужен для каких-то дополнительных действий когда происходит взаимодействие с любым объектом. В прокси существуют несколько обработчиков-ловушек, которые срабатывают при определённых событиях. Самые популярные среди них это get и set, которые срабатывают соответственно при получении свойства объекта и при установке нового значения в свойство объекта. На эти ловушки можно повесить свои обработчики.</p>
2
<p>Пример:</p>
2
<p>Пример:</p>
3
<p>Для чего это нужно? Например, мы хотим переопределить поведение какой-то функции, чтобы она умела работать с другими типами данных или с другим количеством параметров(это называется перегрузка функции). Либо если нужно дополнительно проверять значение, которые добавляются в свойства объекта, либо например нужно вести логирование при работе с объектом. В общем, везде, где мы хотим внести дополнительную логику над объектом, может пригодиться прокси.</p>
3
<p>Для чего это нужно? Например, мы хотим переопределить поведение какой-то функции, чтобы она умела работать с другими типами данных или с другим количеством параметров(это называется перегрузка функции). Либо если нужно дополнительно проверять значение, которые добавляются в свойства объекта, либо например нужно вести логирование при работе с объектом. В общем, везде, где мы хотим внести дополнительную логику над объектом, может пригодиться прокси.</p>
4
<p>Чтобы было более понятно, в каких ситуациях может пригодиться Proxy, давайте разберем реальный пример. Предположим в нашем приложении используется функция вычисления какого-то результата, например вычисление факториала:</p>
4
<p>Чтобы было более понятно, в каких ситуациях может пригодиться Proxy, давайте разберем реальный пример. Предположим в нашем приложении используется функция вычисления какого-то результата, например вычисление факториала:</p>
5
<p>Если вы не знаете что такое факториал и вам не понятно что делает функция - это не страшно. Главное, что нам нужно тут знать, это что фукнция что-то вычисляет и делает это очень неэффективно. При передаче в функцию даже не очень высокого значения может занять значительное время вычисления. Поэтому хорошей идеей будет добавить мемоизацию в такую фукнцию, чтобы при одних и тех же параметрах функция не выполняла повторно вычисление, а возвращала сохраненный результат:</p>
5
<p>Если вы не знаете что такое факториал и вам не понятно что делает функция - это не страшно. Главное, что нам нужно тут знать, это что фукнция что-то вычисляет и делает это очень неэффективно. При передаче в функцию даже не очень высокого значения может занять значительное время вычисления. Поэтому хорошей идеей будет добавить мемоизацию в такую фукнцию, чтобы при одних и тех же параметрах функция не выполняла повторно вычисление, а возвращала сохраненный результат:</p>
6
<p>Какие это дает преимущества?</p>
6
<p>Какие это дает преимущества?</p>
7
<p>Мы можем просто добавить нужную логику к уже существующим объектам в коде. Это позволяет добавить логику в одном месте, без переписывания использования объекта по всему коду.</p>
7
<p>Мы можем просто добавить нужную логику к уже существующим объектам в коде. Это позволяет добавить логику в одном месте, без переписывания использования объекта по всему коду.</p>
8
<p>Например, такой подход можно использовать для<a>MVC</a>. При изменении проксированного объекта-состояния, представляющего модель, могут вызываться обработчики-рендеры. Таким образом состояние будет перерисовываться при любых изменениях.</p>
8
<p>Например, такой подход можно использовать для<a>MVC</a>. При изменении проксированного объекта-состояния, представляющего модель, могут вызываться обработчики-рендеры. Таким образом состояние будет перерисовываться при любых изменениях.</p>
9
<p>Конечно, прокси-объект тут не единственный способ достижения подобных результатов. С тем же успехом мы могли бы использовать свой класс и методы или что-то еще. Но если объект нам не принадлежит, например, если это чужая библиотека, нам бы пришлось делать какую-то обертку над этим объектом. Прокси-объект же позволяет добавить логику непосредственно в сам объект, не меняя его интерфейс.</p>
9
<p>Конечно, прокси-объект тут не единственный способ достижения подобных результатов. С тем же успехом мы могли бы использовать свой класс и методы или что-то еще. Но если объект нам не принадлежит, например, если это чужая библиотека, нам бы пришлось делать какую-то обертку над этим объектом. Прокси-объект же позволяет добавить логику непосредственно в сам объект, не меняя его интерфейс.</p>