Concerns:
  • Which object needs to be created.

  • Managing the life time of the object.

  • Managing the build-up and tear down concerns of the object.

Definition:

"Define an interface for creating an object, but let subclasses decide which class to instantiate"

C# Implementation of Factory method

abstract class Factory
{
public abstract Product GetProduct(); //Factory Method Declaration
}

class
concreteFactoryforProcuct1 : Factory
{
public override Product GetProduct() //Factory Method Implementation
{
return new Product1();
}
}

class concreteFactoryforProcuct2 : Factory
{
public override Product GetProduct() //Factory Method Implementation
{
return new Product2();
}
}

interface
Product
{
void GetDetails();
}

class
Product1 : Product
{
public void GetDetails()
{
Console.WriteLine("Product1 Details are Called");
}
}

class
Product2 : Product
{
public void GetDetails()
{
Console.WriteLine("Product2 Details are called");
}
}

protected void Page_Load(object sender, EventArgs e)
{

Factory[] objFactories = new Factory[2];
objFactories[0] = new concreteFactoryforProcuct1();
objFactories[1] = new concreteFactoryforProcuct2();
foreach (Factory objFactory in objFactories)

{
Product objProduct = objFactory.GetProduct();
objProduct.GetDetails();
}
}