Non credo che esista una "definizione rigorosa" di un modello. Con la loro natura esistono schemi per catturare l'essenza di un problema che si ripete di volta in volta nel software e delineare come potrebbe apparire una soluzione.
In particolare con il modello di fabbrica, no, non è necessario che i metodi di fabbrica siano statici. L'essenza del modello è che hai un oggetto che è responsabile della creazione di istanze di un'altra classe. Il modo in cui lo fai dipende solo da te, sebbene un modo comune, come descritto nel modello, sia quello di utilizzare un metodo statico su una classe. Tuttavia, abbiamo un meccanismo di fabbrica in uno dei nostri sistemi che è in realtà a due stadi. Si utilizza un metodo statico su una classe per creare l'oggetto factory, che può essere configurato per scegliere tra una serie di implementazioni e quindi utilizzare l'oggetto factory per eliminare le istanze dell'oggetto che è necessario eseguire il lavoro reale.
Considerare anche l'implementazione dello schema di fabbrica in una lingua che non ha metodi statici. Ad esempio, in Scala si usa un oggetto invece di una classe. Sebbene il comportamento di questo sia molto simile all'utilizzo di metodi statici su una classe in Java, la natura dell'implementazione è piuttosto diversa.
+1 è davvero importante non aspettarsi che i pattern facciano il tuo pensiero per te, i pattern non sono rigidi, i pattern non sono clementi, i pattern non sono sotto controllo! – djna