Все-таки я не очень понял, как осуществдяется "подмена". Только при загрузке модуля заменой фабрики?
А если нужно в каком-то модуле обеспечить независимую от конкретного типа обработку объектов? Т.е. этот модуль "знает" только абстрактные типы, а объекты к нему сыплются конкретные. Он вызывает метод абстрактного типа, а конкретный объект как сам должен определить, что именно ему нужно работать?