Factory Method Design Pattern using C#

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();
    }
}