Middle+
101
questionbank
Где и когда вы использовали паттерн Prototype?
Ответ от нейросети
sobes.tech AI
Паттерн Prototype использовал, когда требовалось создавать множество похожих объектов с минимальными затратами. Например, при работе с пользовательским интерфейсом для создания идентичных визуальных элементов или при生成(generative) данных для тестов.
Конкретный пример: создание серии объектов Image для отображения в галерее. Вместо того, чтобы загружать и обрабатывать каждый образ отдельно, создавался один "прототипный" объект Image с общими свойствами (например, размеры, эффекты), а затем клонировались его экземпляры, для каждого из которых менялся только путь к файлу изображения.
// Пример реализации Prototype
public class Image implements Cloneable {
private String filePath;
private int width;
private int height;
public Image(String filePath, int width, int height) {
this.filePath = filePath;
this.width = width;
this.height = height;
}
// Геттеры и сеттеры
@Override
protected Object clone() throws CloneNotSupportedException {
// Поверхностное копирование
return super.clone();
}
// Метод для отображения изображения
public void display() {
System.out.println("Displaying image: " + filePath + " (" + width + "x" + height + ")");
}
}
public class ImageGallery {
private Image prototypeImage;
public ImageGallery(int width, int height) {
// Создаем прототип с общими свойствами
this.prototypeImage = new Image(null, width, height);
}
public Image createImage(String filePath) {
try {
// Клонируем прототип
Image newImage = (Image) prototypeImage.clone();
// Устанавливаем специфичное свойство
newImage.setFilePath(filePath);
return newImage;
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
ImageGallery gallery = new ImageGallery(800, 600);
// Создаем изображения на основе прототипа
Image img1 = gallery.createImage("path/to/image1.jpg");
Image img2 = gallery.createImage("path/to/image2.png");
Image img3 = gallery.createImage("path/to/image3.gif");
img1.display();
img2.display();
img3.display();
}
}