Что преимущество вызова является новым на экземпляре объекта?

Я бы посмотрел на такие вещи, как (неофициальная) разработка GBA или тому подобное, конечно, есть «Библиотеки», но вы можете копаться и просто вставлять биты в конкретные адреса и делать вещи происходящими. Вы не можете получить больше «Нет API», чем доступ к оборудованию с отображением в памяти.

11
задан Bill the Lizard 13 October 2017 в 12:09
поделиться

3 ответа

Таким образом, вы можете создать другой объект того же класса, не зная, что это за объект исходного класса - это может создать действительно изящный компактный фабричный шаблон.

В качестве примера это полезно когда у вас есть объекты ресурсов, которые необходимо создать, когда возникает необходимость, и затраты на вычисление КАКОГО типа объекта ресурсов высоки (скажем, длительный запрос к БД). Следовательно, фабрика будет видеть, был ли ей передан старый объект ресурса, и если да, создаст такой же, как он, просто вызвав $ old_object-> new () - избегая затрат ресурсов на повторное вычисление вида ресурса.

В качестве другого примера, если у вас есть иерархия классов, обозначающая животных, и фабрика для создания новых животных в симуляции, вы можете вызвать $ newborn = $ factory-> make_new_animal ($ mother) с заводской реализацией просто $ object-> new ()

12
ответ дан 3 December 2019 в 04:33
поделиться

Я не вижу реальной пользы. Вы всегда можете просто выполнить ref ($ obj) -> new или получить метод $ obj-> clone ; таким образом вы не останетесь без сомнения, что из этих двух $ object-> new делает.

7
ответ дан 3 December 2019 в 04:33
поделиться

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

Что касается клонирования объекта, я обычно пишу явные методы clone () или copy (), которые могут правильно копировать атрибуты и другие данные, но нет причин, по которым new () не может позаботиться об этой роли, если это четко задокументировано. Однако я вижу два преимущества в их раздельном определении:

  1. возможность использовать другой класс (дочерний элемент или миксин / роль (например, роль Moose)) для переопределения различного поведения
  2. , что может сделать код более понятным. , например, если шаги, необходимые для создания нового «пустого» объекта, сильно отличаются от шагов при клонировании существующего объекта.
5
ответ дан 3 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: