Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prototype vs Flyweight

I start to learn design-patterns. I understand that prototype is for making an exact copy of an object I already have and Flyweight is for making similar objects.

I've programmed 2D platformer game like Mario (in Java). There are a lot of enemies which are the same the only difference is their position [x,y]. There are also walls which are built from a huge number of rectangles and again the only difference is their position [x,y].

Is it wise to use some of these design patterns in this particular situation? Should I use prototype to clone objects via cloneable and then set [x,y]?

Is it better to use flyweight - when I need new object I just return them from my hashmap and then set [x,y]?

In both scenarios I avoid using new operator but I am not sure which one to use.

like image 258
Martin Čuka Avatar asked Aug 22 '15 07:08

Martin Čuka


1 Answers

You've got it a bit wrong. Prototype is used to create new instances, Flyweight is used to allow sharing of instances.

Not the best example, but game-wise Prototype would mean that you have an EnemyPrototype (or several) and you create a new enemy from that. In a naive implementation this would duplicate all the data, including the graphics. So for 100 enemies you would have the same image 100 times in memory (not a good thing).

As for Flyweight, you would share the graphics. Not really a very good example for Flyweight pattern, since it can be solved easier without any need for such a pattern (just get the reference to the image from a map or factory or whatever).

As for avoiding the new operator, there's no need. There's no advantage in using clone() over new, rather there are some disadvantages.

like image 65
Kayaman Avatar answered Sep 29 '22 14:09

Kayaman