Definicion:
Define una interfaz para crear un objeto pero deja a las subclases el trabajo de decidir que clase instanciar, El patron Factory permite que una clase difiera la instansacion a otra subclase

Participantes:

Product : define una interfaz de un objeto que metodo Factory creara.

ConcreteProduct: implementa la interfaz Product para crear un producto en concreto.

Creator: declara el metodo factory que devolvera un objeto del tipo product.

ConcreteCreator: sobre escribe e metodo factory del creator devoler una intancia de un producto en concreto (Concreteproduct).

Generalmente este patrón se utiliza cuando no se puede anticipar el tipo de objeto que se deberá crear, o cuando una clase quiere que sus sub clases especifiquen el tipo de objetos que se crearan, de esta manera una clase delega responsabilidad a una o un grupo de sub clases.

La facilidad mas importante que no aporta este patron es que se desliga a la aplicación de vincularse con una clase en especifico, sino que a nivel de código solo se trata con una interfaz y luego se puede trabajar con cualquier clase ConcretProduct .

De esta manera tenemos mayor flexibilidad a la hora de crear objetos que hacerlo de manera directa.

Aquí pueden descargar las clases en C# creadas con el Visual Studio 2008

Aquí pueden descargar el diagrama de clases realizado en el PowerDesigner