В шаблоне прокси класс представляет функциональность другого класса. Этот тип шаблона дизайна подпадает под структурный шаблон.
В шаблоне прокси мы создаем объект, имеющий оригинальный объект, чтобы связать его функциональность с внешним миром.
Реализация
Мы собираемся создать интерфейс Image и конкретные классы, реализующие интерфейс Image . ProxyImage — это прокси-класс, который уменьшает объем памяти, загружаемой объектом RealImage .
ProxyPatternDemo , наш демонстрационный класс, будет использовать ProxyImage, чтобы получить объект Image для загрузки и отображения по мере необходимости.
Шаг 1
Создать интерфейс.
Image.java
public interface Image { void display(); }
Шаг 2
Создайте конкретные классы, реализующие тот же интерфейс.
RealImage.java
public class RealImage implements Image { private String fileName; public RealImage(String fileName){ this.fileName = fileName; loadFromDisk(fileName); } @Override public void display() { System.out.println("Displaying " + fileName); } private void loadFromDisk(String fileName){ System.out.println("Loading " + fileName); } }
ProxyImage.java
public class ProxyImage implements Image{ private RealImage realImage; private String fileName; public ProxyImage(String fileName){ this.fileName = fileName; } @Override public void display() { if(realImage == null){ realImage = new RealImage(fileName); } realImage.display(); } }
Шаг 3
Используйте ProxyImage, чтобы получить объект класса RealImage при необходимости.
ProxyPatternDemo.java
public class ProxyPatternDemo { public static void main(String[] args) { Image image = new ProxyImage("test_10mb.jpg"); //image will be loaded from disk image.display(); System.out.println(""); //image will not be loaded from disk image.display(); } }
Шаг 4
Проверьте вывод.