I don't understand why you want to derive your bugs from a grid. Neither an ant nor a bug is a grid. Both can be on a grid if you want. I also don't understand your factory methods that are basically copy constructors. What are they good for? Maybe you can step back a bit from all that design and patterns and tell us what you want to achieve. In plain english