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 all ship initialization into ShipFactory, then initialize it in the subclasses using super()