Ответ 1
Да, для реализации шаблона посетителя теперь вам нужен доступ к источнику A, B и C, если все классы не имеют одинаковой сигнатуры (поэтому у всех есть метод wash() с тем же именем). Если это так, вы можете использовать полиморфизм для вызова правильного метода.
В противном случае можно добавить функциональность к классам, к которым у вас нет доступа на уровне исходного кода. В статье Википедии о шаблоне посетителя (http://en.wikipedia.org/wiki/Visitor_pattern) есть небольшая сноска ниже примера Java:
Примечание. Более гибкий подход к этому шаблону заключается в создании класса-оболочки, реализующего интерфейс, определяющий метод accept. Оболочка содержит ссылку, указывающую на CarElement, которая может быть инициализирована через конструктор. Такой подход позволяет избежать необходимости реализации интерфейса для каждого элемента. [см. статью ниже, статья Jip-Tip 98]
Он ссылается на эту статью: http://www.javaworld.com/javaworld/javatips/jw-javatip98.html
Итак, все возможно, но это дает огромное количество классов для небольшой задачи, которую вы хотите сделать. Я бы придерживался экземпляра, если бы я был вами.