Почему бы не предоставить соответствующие конструкторы вместо фабричных методов? Есть ли четвертый сценарий, в котором ObjectA
может быть «создан по умолчанию»?
Конструкторы обладают определенным преимуществом в качестве подхода в том, что они являются наиболее видимой частью открытого интерфейса ObjectA
, когда кто-то собирается его создать. Если основной сценарий для экземпляров должен быть создан одним из упомянутых вами способов, я настоятельно рекомендую конструкторы.
Специальное упоминание для конструктора "клон": если в вашей сборке есть другие классы, которые можно клонировать, возможно, имеет смысл определить собственную производную IClonable
, а также с четко определенной семантикой (мелкий или глубокий клон) и используйте этот подход вместо конструктора копирования.