Sobes.tech
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();
    }
}