Introduction of Abstract Factory Design Pattern in C#, C++ and Java











Project Structure : 





Abstract Product

Create the interface for products, This declares an interface for a type of product object 

Abstract Product code 1


namespace Demo_Abstract_Factory_Design_Pattern.Interface
{

    /// <summary>
    /// IAbstractLowPriceCarProduct info
    /// </summary>
    public interface IAbstractLowPriceCarProduct
    {
        string GetLowPriceCarProductInfo();  
    } 
}

Abstract Product code 2

namespace Demo_Abstract_Factory_Design_Pattern.Interface
{
    /// <summary>
    /// IAbstractHighPriceCarProduct interface
    /// </summary>
    public interface IAbstractHighPriceCarProduct
    {
        string GetHighPriceCarInfo();
    }
}

Product 

Create class objects for products, This defines a product object to be created by the corresponding concrete factory also implements the AbstractProduct interface 

Abstract Product Object implementation code 1


namespace Demo_Abstract_Factory_Design_Pattern.Concrete
{
    /// <summary>
    /// Abstract Product with High price car in maruti
    /// </summary>
    class AbstractMaruti_Baleno_CarProduct : IAbstractLowPriceCarProduct
    {
        public string GetLowPriceCarProductInfo()
        {
            return "Model: Maruti Baleno Car\n";
        }
    }
}

Abstract Product Object implementation code 2


namespace Demo_Abstract_Factory_Design_Pattern.Concrete
{
    /// <summary>
    /// Abstract Product with low price car in maruti
    /// </summary>
    class AbstractMaruti_Swift_CarProduct : IAbstractLowPriceCarProduct
    {
        public string GetLowPriceCarProductInfo()
        {
            return "Model: Maruti Swift Car\n";
        }
        

    }
}

Abstract Product Object implementation code 3


namespace Demo_Abstract_Factory_Design_Pattern.Concrete
{
    /// <summary>
    /// Abstract Product with High price car in Mercedes
    /// </summary>
    class AbstractMercedesBenz_E_Class_Sedans_CarProduct : IAbstractHighPriceCarProduct
    {
        public string GetHighPriceCarInfo()
        {
            return "Model:Mercedes Benz E Class Sedans\n";
        }
    }
}

Abstract Product Object implementation code 4


namespace Demo_Abstract_Factory_Design_Pattern.Concrete
{
    /// <summary>
    /// Abstract Product with low price car in Mercedes
    /// </summary>
    class AbstractMercedesBenz_Sedans_CarProduct : IAbstractHighPriceCarProduct
    {
        public string GetHighPriceCarInfo()
        {
            return "Model: Mercedes Benz Sedans\n";
        }
       
    }
}

Abstract Factory Interface 

Create factory interface, This is an interface for operations which is used to create abstract product. 

namespace Demo_Abstract_Factory_Design_Pattern.Interface
{
    /// <summary>
    /// abstract factory class
    /// </summary>
    public interface IAbstractCarFactory
    {
        IAbstractLowPriceCarProduct GetMarutiCarProduct();
        IAbstractHighPriceCarProduct GetMercedesBenzCarProduct();

    }
}

Create factory objects, This is a class which implements the AbstractFactory interface operations to create concrete products.

Abstract Factory Object implementation code 

namespace Demo_Abstract_Factory_Design_Pattern.Concrete
{

    /// <summary>
    /// Concrete Factory High Price Cars class or object
    /// </summary>
    class ConcreteFactoryHighPriceCars : IAbstractCarFactory
    {
        public IAbstractLowPriceCarProduct GetMarutiCarProduct()
        {
            return new AbstractMaruti_Baleno_CarProduct();
        }

        public IAbstractHighPriceCarProduct GetMercedesBenzCarProduct()
        {
            return new AbstractMercedesBenz_E_Class_Sedans_CarProduct();
        }
 
    }
}

Abstract Factory Object implementation code 

namespace Demo_Abstract_Factory_Design_Pattern.Concrete
{
    /// <summary>
    /// Concrete Factory Low Price Car class or object
    /// </summary>
    class ConcreteFactoryLowPriceCar : IAbstractCarFactory
    {
        public IAbstractLowPriceCarProduct GetMarutiCarProduct()
        {
            return new AbstractMaruti_Swift_CarProduct();
        }

        public IAbstractHighPriceCarProduct GetMercedesBenzCarProduct()
        {
          return  new AbstractMercedesBenz_Sedans_CarProduct();
        }
    }
}

Client Code :

User can access the data using this object, This is a class which uses AbstractFactory and AbstractProduct interfaces to create a family of related objects.

namespace Demo_Abstract_Factory_Design_Pattern.Client
{
    public class ClientCars
    {
        IAbstractHighPriceCarProduct abstractHighPriceCarProduct;
        IAbstractLowPriceCarProduct abstractLowPriceCarProduct;

        public ClientCars(IAbstractCarFactory carFactory)
        {
            abstractHighPriceCarProduct = carFactory.GetMercedesBenzCarProduct();
            abstractLowPriceCarProduct = carFactory.GetMarutiCarProduct();
        }

        public string GetMercedesBenzCarProduct()
        {
            return abstractHighPriceCarProduct.GetHighPriceCarInfo();
        }
        public string GetMarutiCarProduct()
        {
            return abstractLowPriceCarProduct.GetLowPriceCarProductInfo();
        }
    }
}


Start Program code : 

namespace Demo_Abstract_Factory_Design_Pattern
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("********* Start High Price cars info **********\r");
            IAbstractCarFactory abstractCarFactory = new ConcreteFactoryHighPriceCars();
            ClientCars clientMercedesBenzCars = new ClientCars(abstractCarFactory);
            Console.WriteLine(clientMercedesBenzCars.GetMercedesBenzCarProduct());
            Console.WriteLine(clientMercedesBenzCars.GetMarutiCarProduct());
            Console.WriteLine("********* End High Price cars info **********\r\n");


            Console.WriteLine("*******************************************************************************************\r\n");

            Console.WriteLine("*********Start Low Price cars info**********\r");
            IAbstractCarFactory abstractCarFactory1 = new ConcreteFactoryLowPriceCar(); 
            ClientCars clientmarutiCars = new ClientCars(abstractCarFactory1);
            Console.WriteLine(clientmarutiCars.GetMercedesBenzCarProduct());
            Console.WriteLine(clientmarutiCars.GetMarutiCarProduct());
            Console.WriteLine("*********End Low Price cars info**********\r\n");

            Console.ReadKey();

        }
    }
}

Out Put :


********* Start High Price cars info **********
Model:Mercedes Benz E Class Sedans

Model: Maruti Baleno Car

********* End High Price cars info **********

*******************************************************************************************

*********Start Low Price cars info**********
Model: Mercedes Benz Sedans

Model: Maruti Swift Car

*********End Low Price cars info**********









Comments

  1. I am grateful to this blog site providing special as well as useful understanding concerning about part time online teaching jobs from home

    ReplyDelete

Post a Comment

Popular posts from this blog

What is singleton software design patterns ?

Software Programming Teacher - Introduction