Итак, я прочитал около prototype pattern и обнаружил, что я на самом деле натолкнулся на эту проблему программирования несколько раз, не осознав этого сам.Прототип шаблона против делегата-разработчика
Мое понимание со стороны, прочитав эту статью, и википедии, кажется:
Используйте шаблон прототип клонировать, то существующий объект изменить свои свойства, вместо того, чтобы пытаться создать с нуля, когда есть нет способ заранее знать его конструктор или то, что он будет.
Как я обычно решить эту проблему, чтобы использовать функцию делегат, который возвращает объект:
// Pseudocode
// Library Routine
function GetTasks(CreateTaskDelegate callback) {
var task = array();
foreach(var rows as row) {
tasks.push(callback($row));
}
return tasks;
}
// Library Interface/Abstract Class
class Task { }
// User Concrete Class
class MyCustomTask extends Task {}
// delegate "pattern"
GetTasks(function($row) {
return new MyCustomTask($row);
});
Как это соотносится с моделью прототипа? Похоже, что образец прототипа имеет более узкую применимую область применения, так что еще лучше?