Ships now contain interconnected rooms

Breaking these classes up into design patterns makes this all look really nice, but it is not very DRY.  When creating rooms and ships I am repeating myself a lot. Is there a better way to do this? Should I use method overriding? Would using the super keyword would many arguments look too messy? 

I'm pretty pleased with the design patterns I have been using. Is there any better way I could of organized this? 

Did I organize my room correctly? 
Extract create_rooms and connect_rooms into the initialization method of SpaceCruiser. It is generally bad practice to put methods into initialize(), but I think the alternative in this case breaks the current flow of the program too much.