Нарушает ли шаблон «Прототип» принцип подстановки Лискова?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Нарушает ли шаблон «Прототип» принцип подстановки Лискова?

Сообщение Anonymous »


Я пересматриваю шаблоны проектирования, особенно те, которые я не использовал какое-то время или вообще не использовал. И один из них — паттерн Прототип.

В разных источниках (например, в этом) говорится, что вам следует реализовать интерфейс Clonable и переопределить метод clone() для реализации шаблона прототипа в Java. Но там также говорится:

Реализация clone() может быть затруднена, если их внутренние компоненты включают объекты, которые не поддерживают копирование или имеют циклические ссылки.

Для меня это имеет смысл, например. если существует некий суперкласс GameCharacter и дюжина дочерних классов, которые имеют одно и то же базовое состояние, но некоторые из них могут быть «уникальными» (т. е. не клонируемыми), а некоторые нет (т. е. клонируемыми).

Но не нарушает ли это принцип замены Лискова? Там написано

объекты суперкласса должны иметь возможность заменяться объектами подкласса без ущерба для корректности программы

но в описанном выше случае будет нарушен LSP, верно? Неклонируемые объекты будут вызывать исключение CloneNotSupportedException в случае вызова clone(), что влияет на корректность работы программы. Я что-то упустил?

Хотя я еще не работал с действительно огромными классами, до сих пор я всегда использовал конструкторы, подобные приведенным ниже, и они хорошо справлялись со своей задачей:

@Getter @Сеттер общественный класс Tst { частная строка prop1; частный Prop2 prop2; ...... общественный Tst (Tst sourceObj) { Tst targetObj = новый Tst() this.setProp1(sourceObj.getProp1()) this.setProp2(новый Prop2(sourceObj.getProp2())) ..... } } Вы помещаете такой конструктор в тот класс, где он нужен, и вызываете его в нужном месте с помощью приведения.

Итак, есть ли реальные случаи, когда паттерн «Прототип» сегодня приносит большую прибыль? Или в большинстве случаев это просто перебор?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»