Посетитель - это объект или функция, который приходит к источнику данных, чтобы получить какое-то значение
Если посетитель - функция, то он по-умолчанию считается гостем
Если посетитель - объект без метода introduction, то также считаем его гостем
Если посетитель - объект, имеющий метод introduction то при значение guest - будет гостем, при значении patron - патроном