所以今天我读到了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 :(得分:0)
假设您的creator delegate
实际上是factory method
模式,我可以说prototype
和factory method
之间存在差异:
Factory method
是最简单的create patterns
。 +
很简单。 -
需要创建子类才能创建不同类型的产品。 Prototype
使用其他方法。它不是继承而是使用对象的组合。在这种情况下,有一些对象知道如何创建产品(原型),并将其指定为参数。 +
敏捷。 -
是复杂的。