Определение: Используйте экземпляры прототипа, чтобы указать тип созданных объектов, и создать новые объекты, копируя эти прототипы.
Тип: создать шаблон класса
Классовая диаграмма:
Паттерн прототипа в основном используется для копирования объекта, а его ядро - прототип прототипа класса на классной диаграмме. Класс прототипа должен соответствовать следующим двум условиям:
Реализуйте клонируемый интерфейс. В языке Java есть клонируемый интерфейс, который имеет только одну функцию, которая состоит в том, чтобы уведомить виртуальную машину во время выполнения, которая может безопасно использовать метод клона в классах, которые реализуют этот интерфейс. В виртуальной машине Java можно скопировать только классы, которые реализуют этот интерфейс, в противном случае ClonenotSupportedException будет брошено во время выполнения.
Перепишите метод клона в классе объекта. В Java родительские классы всех классов являются объектными классами. В классе объекта есть метод клонов, который возвращает копию объекта, но его объем защищен, и общие классы не могут быть вызваны. Следовательно, класс прототипа должен изменить объем метода клона на публичный тип.
Режим прототипа является относительно простым режимом и очень прост для понимания. Чтобы реализовать интерфейс и переписать метод, режим прототипа завершается. В практических приложениях модели прототипа редко появляются в одиночестве. Он часто смешивается с другими узорами, а его прототип класса прототипа также часто заменяется абстрактными классами.
Код реализации:
Пакет Prototypattern; Public Class Prototyplass реализует Clonable {@Override Protected ProTotyClass Clone () {Prototyplass prototyplass = null; try {prototyplass = (prototyplass) super.clone (); } catch (clonenotsupportedException e) {// todo автоматически сгенерированный блок e.printstacktrace (); } вернуть ProTotyplass; }}Клиент:
Пакет Prototypattern; Public Class Client {public static void main (string [] args) {prototyplass obj1 = new Prototypeclass (); Prototyplass obj2 = obj1.clone (); System.out.println (obj1); System.out.println (obj2); }} Преимущества режима прототипа и применимых сценариев
Создание объектов с использованием прототипового режима намного лучше, чем непосредственно новое, потому что метод клона класса объекта - это локальный метод, который непосредственно манипулирует двоичными потоками в памяти, особенно при копировании больших объектов разница в производительности очень очевидна.
Еще одним преимуществом использования прототиповых шаблонов является упрощение создания объектов, что делает создание объектов такими же простыми, как копирование вставки при редактировании документа.
Из -за вышеупомянутых преимуществ вы можете рассмотреть возможность использования шаблонов прототипа, когда вам необходимо многократно создавать похожие объекты. Например, вам нужно создать объект в теле петли. Если процесс создания объекта более сложный или количество циклов много, использование режима прототипа может не только упростить процесс создания, но и значительно улучшить общую производительность системы.
Прототип открытого класса реализует клонируемый {private ArrayList List = new ArrayList (); публичный прототип клон () {прототип прототип = null; try {prototype = (prototype) super.clone (); prototype.list = (arraylist) this.list.clone (); } catch (clonenotsupportedException e) {e.printstacktrace (); } вернуть прототип; }}Примечания в режиме прототипа:
Поскольку ArrayList не является основным типом, список переменных участников не будет скопирован, и нам необходимо реализовать глубокую копию сами. К счастью, большинство классов контейнеров, предоставленных Java, реализуют клонируемый интерфейс. Так что не особенно сложно достичь глубокого копирования.
PS: В задачах глубоких копий и неглубоких копий возникнет глубокая копия, включая основные типы в 8 Java и их типах инкапсуляции, а также есть типы строк. Остальные - мелкие копии.