Недавно я читал шаблоны проектирования, и есть что-то, чего я не понимаю в прокси-шаблоне.
цитата из книги:
- Виртуальный прокси создает дорогостоящие объекты по требованию. ImageProxy, описанный в Мотивации, является примером такого прокси.
Я понимаю, что этот шаблон можно использовать для создания дорогих объектов по запросу. И этот пример также хорошо иллюстрирует использование.
Ниже представлен конструктор проксируемого класса RealImage
. Метод loadFromDisk()
обозначает дорогостоящую процедуру.
public RealImage(String fileName){
this.fileName = fileName;
loadFromDisk(fileName);
}
А прокси-класс ProxyImage
в примере делает именно то, для чего он предназначен: создавать дорогие объекты по требованию.
Но мой вопрос: почему мы не можем просто удалить дорогостоящий метод loadFromDisk()
из конструктора и поместить его туда, где он абсолютно необходим,
как здесь?
public void display() {
if(!loaded){
loadFromDisk(fileName);
loaded = true;
}
//then display
}
Так зачем вообще использовать прокси?