Я думаю эта статья проекта кода на AbstractFactoryPattern довольно неплохо работает, предоставляя полезный пример.
Однако, если у вас нет веских причин, вам не следует создавать один и тот же класс в нескольких разных пространствах имен. Вы всегда можете использовать using Accom;
для доступа к вашему классу Generator из пространства имен Traf.
Отредактируйте в ответ на комментарий, что каждый Генератор в отдельном пространстве имен будет иметь свой набор методов.
Вы не можете использовать абстрактный шаблон фабрики, если реализации будут иметь разные методы. Идея абстрактного шаблона фабрики состоит в том, чтобы создать общий интерфейс, который будут реализованы всеми объектами, возвращаемыми фабрикой, а затем использовать некоторый контекст на фабрике, чтобы выбрать правильную реализацию для данной ситуации.
Преимущество, которое вы получаете, используя фабрику, называется Инверсия управления . По сути, ваш клиентский код не зависит от конкретной реализации класса Generator (имея переменную этого типа или вызывая для нее конструктор).
Однако, если вам нужен доступ к методам, специфичным для реализации, вы не сможете получить к ним доступ через общий интерфейс, что означает, что вы не получаете преимущества Inversion of Control, а это означает, что нет реальной причины использовать абстрактный шаблон фабрики.