Прокси-шаблон конкретного класса, скрывающий детали реализации

Я читал о шаблонах java-прокси и обработчике вызовов, и везде видно, что конкретная конструкция класса доступна для клиента.

Например,

//TwitterService service = (TwitterService) SecurityProxy.newInstance(new TwitterStub());
TwitterService service = new TwitterStub();
System.out.println(service.getTimelinePosts("abc"));

Пользователь может создать экземпляр TwitterStub напрямую и доступ к методам. Мне было интересно, есть ли способ не разоблачать или избегать построения конкретного класса через клиента?

Есть ли способ лучше?

1 ответ

Как говорит GoF, цель шаблона прокси - "предоставить суррогат или заполнитель для другого объекта для контроля доступа к нему".

Итак, в вашем конкретном случае происходит то, что вы создаете конкретный экземпляр прокси напрямую. И это нормально, если вы (как клиент) знаете, что вам нужен прокси-объект определенного типа.

Если вам нужен уровень косвенности, вы можете использовать абстрактный шаблон фабрики, который возвращает различные типы прокси-объектов. Но пока причина прокси-объектов заключается в том, чтобы действовать от имени других объектов.

Напомним, что прокси полезны, когда у вас есть дорогостоящие объекты, но вы не хотите наносить вред основной функции приложения из-за таких затрат. Например, предположим, у вас есть документ с 1000 изображений. Вы можете использовать для них прокси-серверы и загружать их только тогда, когда это строго необходимо (то есть, когда они находятся в видимом окне), и вы все равно можете загружать весь документ действительно быстро, без лишних затрат на чтение 1000 изображений одновременно.

Другие вопросы по тегам