Производительность клонирования (с помощью Cloneable Interface или Copy Constructor) объекта против создания нового объекта в шаблоне прототипа - PullRequest
0 голосов
/ 04 октября 2019

Недавно, изучая Шаблоны проектирования, я узнал, что Шаблон прототипа очень полезен и эффективен в сценариях, где требуется огромное количество объектов.

Шаблон прототипа также сводит к минимуму затраты слишком большого количества объектов. создания с использованием интерфейса Cloneable или конструктора копирования в шаблоне прототипа.

Но я хотел бы знать, как клонирование или копирование объекта более эффективно, чем создание нового объекта. Было бы неплохо объяснить уровень JVM.

Является ли это единственной причиной использования прототипа?

Ответы [ 3 ]

1 голос
/ 04 октября 2019

Интересно, что вы недавно узнали, что Prototype Pattern является производительным, так как этот шаблон проектирования устарел. Вы можете проверить этот вопрос stackoverflow , которому почти 10 лет

1 голос
/ 04 октября 2019

Шаблон-прототип не используется для повышения производительности (хотя, согласно ссылке Иоанниса, он использовался для повышения производительности). Он используется, чтобы вы могли создавать новые объекты из (возможно изменяющегося) прототипа.

Необходим некоторый метод «клонирования», поэтому вам не нужно заботиться о состоянии прототипа. Вы можете просто позвонить prototype.someMethodThatReturnsACopy() и объект готов к использованию. Вы можете использовать clone() или каким-либо другим способом создать эту копию, даже создав ее вручную, если вы действительно хотите.

0 голосов
/ 05 октября 2019

Предыдущие ответы верны в том смысле, что шаблон Prototype не является полезным инструментом повышения производительности в Java.

В книге GoF говорится на стр. 121,

Prototype особенно полезен при использовании staticтакие языки, как C ++, где классы не являются объектами, и мало информации о типах или вообще нет во время выполнения. Это менее важно в таких языках, как Smalltalk или Objective C, которые предоставляют то, что составляет прототип (то есть объект класса) для создания экземпляров каждого класса. Этот шаблон встроен в основанные на прототипах языки, такие как Self, в которых все создание объектов происходит путем клонирования прототипа.

Более современным языком на основе прототипов является JavaScript. Некоторые плюсы и минусы обсуждаются в наследовании на основе прототипов и на основе классов .

...