Performance 原型与飞锤
我开始学习设计模式。我知道原型是为了制作一个我已经拥有的物体的精确副本,而Flyweight是为了制作类似的物体 我已经编写了2D平台游戏,比如Mario(Java)。有很多相同的敌人,唯一的区别是他们的位置。还有一些墙是用大量的矩形建造的,唯一的区别是它们的位置Performance 原型与飞锤,performance,oop,design-patterns,flyweight-pattern,prototype-pattern,Performance,Oop,Design Patterns,Flyweight Pattern,Prototype Pattern,我开始学习设计模式。我知道原型是为了制作一个我已经拥有的物体的精确副本,而Flyweight是为了制作类似的物体 我已经编写了2D平台游戏,比如Mario(Java)。有很多相同的敌人,唯一的区别是他们的位置。还有一些墙是用大量的矩形建造的,唯一的区别是它们的位置[x,y] 在这种特殊情况下使用这些设计模式是否明智?我是否应该使用prototype通过cloneable克隆对象,然后设置[x,y] 使用flyweight是否更好?当我需要新对象时,我只需从hashmap返回它们,然后设置[x,y
[x,y]
在这种特殊情况下使用这些设计模式是否明智?我是否应该使用prototype通过cloneable克隆对象,然后设置[x,y]
使用flyweight是否更好?当我需要新对象时,我只需从hashmap返回它们,然后设置[x,y]
在这两种情况下,我都避免使用new操作符,但我不确定该使用哪种操作符。您的操作有点错误
Prototype
用于创建新实例,Flyweight
用于允许共享实例
这不是最好的例子,但从游戏角度看,原型将意味着你有一个EnemyPrototype
(或多个),并由此创建一个新的敌人。在一个简单的实现中,这将复制所有数据,包括图形。因此,对于100个敌人,你会在内存中有100次相同的图像(这不是一件好事)
至于Flyweight
,您可以共享图形。对于Flyweight
pattern来说,这并不是一个很好的例子,因为不需要这样的pattern(只需从地图或工厂或其他地方获取图像的参考)就可以轻松解决这个问题
至于避免使用
新的
操作符,没有必要。使用clone()
比使用new
没有任何优势,而是存在一些缺点。原型的出现是为了降低创作成本。由于与使用“新”操作符相比,“克隆”并没有多大的性能提升(可能由于复制、转换等成本而更糟),因此真正的提升可能是在创建过程中摆脱繁重的操作(如db访问)
原型还带来了(至少对我来说)克隆对象“浅”或“深”的混淆
在您的情况下,我认为通过Flyweight共享图像图形是明智的,我会为主对象选择另一个Flyweight或对象池