Оба варианта Proxy и State предоставляют суррогатный класс, который вы используете в вашем коде; реальные классы, которые делают работы, спрятаны позади суррогатных классов. Когда вы вызываете метод суррогатного класса, он просто поворачивается назад и вызывает метод в реализуемом классе. Эти два шаблона очень похожи, так что Proxy - это просто особый случай State. Каждый испытывает желание объединить эти два шаблона вместе в шаблон, называемы Surrogate, но термин "proxy" имеет давнее и специализированное значение, которое, вероятно, объясняет причину появления двух шаблонов.
Основная идея проста: из базового класса суррогатный класс наследуется наряду с классом или классами, которые предоставляют реальную реализацию:
Когда создается суррогатный объект, ему передают реализацию, которой он будет посылать все вызовы методов.
Структурное различие между Proxy и State очень просто: Proxy имеет только одну реализацию, в то время как State имеет более одной реализации. Приложения, использующие шаблоны (в Design Patterns), различаются: Proxy используется для доступа к своей реализации, в то время как State позволяет вам менять реализацию динамически. Однако, если вы расширите свое понимание "контроль за доступом к реализации", то эти два шаблона четко совпадут.
← | Пул объектов (Object pool) | Proxy: выдвижение вперед другого объекта | → |