Mar*_*uka 5 oop performance design-patterns
我开始学习设计模式.我知道原型用于制作我已经拥有的对象的精确副本,而Flyweight用于制作类似的对象.
我编写了像Mario(Java)中的2D平台游戏.有很多敌人是相同的,唯一的区别是他们的位置[x,y].还有从巨大的矩形建造的墙壁,唯一的区别是它们的位置[x,y].
在这种特殊情况下使用这些设计模式是否明智?我应该使用prototype来通过cloneable克隆对象然后设置[x,y]吗?
使用flyweight是否更好 - 当我需要新对象时,我只是从我的hashmap返回它们然后设置[x,y]?
在这两种情况下,我都避免使用new运算符,但我不确定使用哪种运算符.
你有点不对劲.Prototype用于创建新实例,Flyweight用于允许共享实例.
不是最好的例子,但游戏方面Prototype意味着你有一个EnemyPrototype(或几个)并且你从中创造了一个新的敌人.在一个天真的实现中,这将复制所有数据,包括图形.因此,对于100个敌人,你将在内存中拥有相同的图像100次(不是一件好事).
至于Flyweight,你会分享图形.对于Flyweight模式来说并不是一个非常好的例子,因为它可以更容易地解决,而不需要这样的模式(只需从地图或工厂或其他任何地方获取对图像的引用).
至于避免new操作员,没有必要.使用clone()结束没有优势new,而是存在一些缺点.