No creo que exista una "definición estricta" de un patrón. Por su naturaleza, existen patrones para capturar la esencia de un problema que surge una y otra vez en el software y delinear cómo se vería una solución.
Específicamente con el patrón de fábrica, no, no hay ningún requisito de que los métodos de fábrica sean estáticos. La esencia del patrón es que tienes un objeto que es responsable de crear instancias de otra clase. Cómo lo hace depende de usted, aunque una forma común, como se describe en el patrón, es utilizar un método estático en una clase. Sin embargo, tenemos un mecanismo de fábrica en uno de nuestros sistemas, que en realidad es de dos etapas. Utiliza un método estático en una clase para crear el objeto de fábrica, que se puede configurar para elegir entre un conjunto de implementaciones, y luego usar el objeto de fábrica para eliminar las instancias del objeto que necesita para realizar el trabajo real.
Considere también la implementación del patrón de fábrica en un idioma que no tiene métodos estáticos. Por ejemplo, en Scala usarías un objeto en lugar de una clase. Aunque el comportamiento de esto es muy parecido al uso de métodos estáticos en una clase en Java, la naturaleza de la implementación es bastante diferente.
+1 es muy importante no esperar que los patrones piensen por usted, los patrones no son estrictos, los patrones no son indulgentes, ¡los patrones no están bajo control! – djna