问题标签 [prototype-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1070 浏览

design-patterns - Yegge 的原型模式示例如何处理实例变量?

我喜欢 Steve Yegge 的原型模式示例,并决定创建一个快速概念验证示例。

然而,我并没有真正考虑清楚。虽然它非常适合动态指定对象的行为并且是史蒂夫固执己见的精灵示例的简单解决方案,但我仍在尝试找出处理实例变量的最佳方法。

例如,假设我有一个 AwesomeDragon 对象。然后我想制作一个 AwesomeDragonImmuneToFire 对象,因此我制作了 AwesomeDragon 的新子代(AwesomeDragonImmuneToFire 继承了 AwesomeDragon 的属性)并将“ImmuneToFire”作为值为“true”的属性。到现在为止还挺好。现在假设我想发送我的 AwesomeDragon 对象去参观附近的农村。这将涉及更新 AwesomeDragon 的“位置”属性。然而,当我这样做的那一刻 AwesomeDragonImmuneToFire 也会起飞。

是在创建对象时覆盖实例值的最佳解决方案,例如立即将 AwesomeDragonImmuneToFire 上的“位置”值“放置”到“位置”的当前“获取”值?

0 投票
3 回答
1487 浏览

java - 原型模式的 Java 实现

Java 平台上有哪些原型模式的实现?

原型模式是软件开发中使用的创建型设计模式,当要创建的对象类型由原型实例确定时,原型实例被克隆以生成新对象。

基于原型的编程

基于原型的编程是一种面向对象的编程风格,其中不存在类,行为重用(在基于类的语言中称为继承)是通过克隆作为原型的现有对象的过程来执行的。

实现应该知道有些 Java 对象是可变的,有些是不可变的(请参阅Mutable vs Immutable objects)。

0 投票
3 回答
4717 浏览

design-patterns - 原型设计模式真的只是克隆吗?

我正在对设计模式进行深入研究,我遇到了原型,这是我以前没有真正研究过的。我已经搜索了网络和几本书,并且没有一个很好的原型示例可以找到不仅仅是克隆。原型的设计模式基本上是java和C#作为克隆的语言特性吗?

0 投票
6 回答
6939 浏览

java - Java“原型”模式 - 新 vs 克隆 vs class.newInstance

在我的项目中,有一些“原型”工厂通过克隆最终的私有实例来创建实例。

这些工厂的作者说,这种模式提供了比调用“新”运算符更好的性能。

使用谷歌获得一些线索,我没有发现任何相关的东西。这是在未知项目的 javdoc中找到的一小段摘录

可悲的是,clone() 比调用 new 慢得多。然而,它比调用 java.lang.Class.newInstance() 快得多,并且比滚动我们自己的“克隆”方法要快一些。

对我来说,它看起来像是 java 1.1 时代的一个古老的最佳实践。有人知道更多吗?这是将它与“现代”jvm 一起使用的好习惯吗?

0 投票
4 回答
1253 浏览

java - 如何实现原型模式?

原型模式的目标是通过降低创建成本来克隆对象。这是一个例子:

我认为这是用于深拷贝。那么,有人可以帮我解决这个问题吗???

0 投票
2 回答
2066 浏览

c# - 原型设计模式与 ICloneable

我正在学习设计模式。今天我在阅读Prototype DP并发现它用于克隆对象。由于我们在 .Net 中有一个ICloneable 接口,我们还需要 Prototype DP 吗?还是ICloneable实现原型 DP?在两者之间进行选择的任何准则?

0 投票
5 回答
2366 浏览

delphi - 德尔福原型模式

我想知道,对于原型模式的简单实现,Delphi 的 RTTI 中是否有任何与 C# 中的 MemberwiseClone 相同的功能。我看到了这种模式的一些 Delphi 实现,其中正在创建一个新对象 (TMyObject.Create),它的属性分配有来自原型对象的值。我可能是错的,但是如果我们以相同的基本方式创建对象,我看不到该模式的好处。

谢谢你。

0 投票
3 回答
12718 浏览

design-patterns - 关于原型模式的问题

我正在学习不同的设计模式,我有一种强烈的感觉,我错过了理解这个特定模式的重要部分(或部分)。

在我查看过的所有网站和 GoF 书中,我看到了克隆方法。据我了解,当我们需要该对象的不同版本时,我们可以克隆某种类型的对象,但我们不希望必须使用“new”命令(如在 Java 中)手动创建每个对象。这可以隐藏它的具体实现。因此,当我们克隆时,我们可以稍微调整克隆并使其成为我们需要的,而不必知道如何以艰难的方式最初创建该对象。这是我的想法正确吗?

我还被告知,这可以减少子类化,从而减少您需要创建的类的数量。我不太明白这部分。有人可以帮我掌握这个吗?

我的最后一个问题是关于抽象工厂(甚至工厂方法)模式。这些工厂模式和原型模式感觉就像他们试图在创建新对象时隐藏具体实现。什么时候选择其中一个是个好主意?

谢谢你们!

0 投票
2 回答
458 浏览

c++ - GoF 对 Prototype 模式的实现

(这个问题更多是针对可以访问这本书的人,否则很难将其置于上下文中)

我一直在阅读 GoF 的“设计模式”一书,在“创建模式->原型->示例代码” (第 124 页)下有一句话让我有点困惑 。

在页面底部附近,有 的实现BombedWall,据我了解,它是一个具体的原型,因为它继承自Wall,并重新定义了Clone()虚函数。BombedWall还定义了另一种方法,任何使用常规接口HasBomb()的客户端都不知道。Wall

BombedWall存储在(Prototype 客户端)中的唯一方法MazePrototypeFactory是作为Wall*(从 中返回BombedWall::Clone),HasBomb()据我了解,之后唯一的方法是将其向下转换Wall*BombedWall*(动态或静态,取决于关于我是否知道类型),然后我可以访问该HasBomb()方法。

这一切对我来说都很好;但后来作者说(同一页,最后一句,第二段最后一段):

“客户永远不必将返回值向下转换为Clone所需的类型”

什么?那我该怎么去HasBomb()

我肯定错过了什么...

0 投票
2 回答
511 浏览

php - 是否使用原型模式

我有个问题。我需要创造一些与产品有关的小东西。现在我可以说 7 种不同类型的产品。有些是其他的子类型,例如

现在,为了争论,我所有的城市、掀背车和轿车都是混合动力/汽油/其他的,我不打算出售汽油和柴油车。然而,我有可能在未来的某个时候拥有汽油和柴油轿车,但我不会拥有 20 多种类型的产品。如果它要上涨,我可能会有 2-3 种类型。

据我了解,这Prototype Pattern可能是一个不错的选择,因为我将能够避免房地产->汽油和面包车->汽油之间的重复……但再一次,面包车将具有与城市汽车不同的特性,例如最大装载尺寸。

我一直在广泛阅读有关设计模式的内容,并且我肯定记得的一件事是在不需要时不要使用模式。现在的问题是——我需要它吗?

谢谢!