原型模式与创建者委托

时间:2014-09-12 08:46:46

标签: design-patterns prototype-pattern

所以今天我读到了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);
});

这与原型模式相比如何?似乎原型模式的适用范围较窄,那么它还有什么用呢?

1 个答案:

答案 0 :(得分:0)

假设您的creator delegate实际上是factory method模式,我可以说prototypefactory method之间存在差异:

  1. Factory method是最简单的create patterns+很简单。 -需要创建子类才能创建不同类型的产品。
  2. Prototype使用其他方法。它不是继承而是使用对象的组合。在这种情况下,有一些对象知道如何创建产品(原型),并将其指定为参数。 +敏捷。 -是复杂的。