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**********
I am grateful to this blog site providing special as well as useful understanding concerning about part time online teaching jobs from home
ReplyDelete