Эмуляция сканера похожа на эмуляцию всего в программировании, и я думаю, что вы смотрите на проблему неправильно. Что бы ни потребляло, «сканер» должен потреблять интерфейс, а не реализацию (см. «D» в SOLID ). Это позволит вам создать отдельную реализацию, которая является эмулированной версией аппаратного обеспечения.
Теперь в этом случае, вероятно, в интерфейсе не так много вещей, которые вам нужны - возможно, некоторые настройки / инициализация, включение / отключение и даже или делегирование для приема данных.