Too little information to give a definitive answer
If the only thing these objects share is data attributes... I'd use something like this.
class Document
{
List<Field> m_Fields;
public void AddField(Field f) {... }
public void AddFields(Field[] f) {... }
}
class DocumentFactory()
{
public static Document GetDocument()
{
Document d = new Document();
d.AddFields(GetDocumentFields()); // private helper .. returns fields 1-8
return d;
}
public static Document GetForm()
{
Document d = new Document();
AddDocumentFields(d);
d.AddField(FIELD_9);
d.AddField(FIELD_10);
}
// and so on..
}
Any code that works irrespective of type of document, goes into the Document class.
If in addition to this you have behavior that is specialized/based on specific object type, you'd need to grow an inheritance type-hierarchy (as Jon says.. it looks like a IS-A relationship from the names.)