Any reason Router needs to be wrapped in the Direction class? You could just use a private constructor. Then the static factory method getRouter() would return a new instance of the Router class.