For everyone saying the visitor pattern requieres switch statements this is false.
The visitor can build its case inside the iterface/implemetation.
If the complexity is being solved by the "housing" class that the visitor will be visiting you are not doing enough.