2014-09-12 8 views
1

Итак, я прочитал около 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); 
}); 

Как это соотносится с моделью прототипа? Похоже, что образец прототипа имеет более узкую применимую область применения, так что еще лучше?

ответ

0

Предполагая, что ваш creator delegate фактически factory method шаблон я могу сказать, что различия между prototype и factory method являются:

  1. Factory method является самым простым из create patterns. + - простота. - нужно создать дочерний класс для создания другого типа продукта.
  2. Prototype использует другой подход. Вместо наследования он использует состав объектов. В этом случае есть некоторый объект, который знает о том, как создавать продукты (прототип), и назначается как параметр. + - ловкость. - - это сложность.
Смежные вопросы