Click here to Skip to main content
Click here to Skip to main content

Illustrating Factory pattern with a very basic example

By , 2 Oct 2012
 

Introduction

The factory pattern method is a popularly used design pattern and it is very useful to restrict clients from knowing the actual business logic methods, it is useful to create a decoupled system, and it is useful to eliminate object creation in a client environment.

This article explains how we can achieve these problems with a small example.

Problem

For example we have a scenario where based on user input we need to call particular class methods. I have a customer input screen. He enters his choice whether they want to buy a bike or a car. Normally we get input from the user and based on that will create an object in the client class and call those methods like below.

//
// customer enters their choice
//
If (choice == “Car”)
{
	// call car class and it’s methods
	Car c = new car();
	c.buy();
}
If (choice == “bike”)
{
	// call bike class and it’s methods
	Bike b = new Bike();
	b.buy()
}
...
  1. In case in future if there is any other vehicle added then we need to change the client functionality.
  2. The above client code depicts that there are classes Car, Bike, and a method Buy. There is no security at the client side.
  3. Need to use the new keyword in client classes.

To avoid these problems Factory pattern is used.

Solution

Problem 1

Create a new interface to depict methods, for example, in our scenario, it is Buy(). Using this interface it will solve problems 1 and 2.

//
// Interface
//
public interface IChoice
{
    string Buy();
}

A new class will be added and this class we will be called factory class. This class sits between the client class and the business class and based on user choice it will return the respective class object through the interface. It will solve problem 3.

//
// Factory Class
//
public class FactoryChoice
{
    static public IChoice getChoiceObj(string cChoice)
     {
        IChoice objChoice=null;
        if (cChoice.ToLower() == "car")
        {
            objChoice = new clsCar();
        }
        else if (cChoice.ToLower() == "bike")
        {
            objChoice = new clsBike();
        }
        else
        {
            objChoice = new InvalidChoice();
        }
        return objChoice;
    }
}
 
//Business classes
//Car
public class clsBike:IChoice
{
    #region IChoice Members
 
    public string Buy()
    {
        return ("You choose Bike");
    }
 
    #endregion
}
 
//Bike
public class clsCar:IChoice
{
 
    #region IChoice Members
 
    public string Buy()
    {
        return ("You choose Car");
    }
 
    #endregion
}

From the client class call the factory class object and it will return the interface object. Through the interface object we will call the respective method.

//Client class
IChoice objInvoice;
objInvoice = FactoryClass.FactoryChoice.getChoiceObj(txtChoice.Text.Trim());
MessageBox.Show(objInvoice.Buy());

In future if we need to add a new vehicle then there is no need to change the client class, simply return that object using the factory class.

Advantages

Suppose we want to add a decoupled structure and don’t want to disturb the client environment again and again, this pattern is very useful. The factory class will take all the burden of object creations.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Rajesh Varma Buddaraju
Software Developer (Senior)
India India
Member
I am Microsoft Certified Technology Specialist for Web Application Development. I have 8+ years of experience in Web application development.I have considerable experience developing client / server software for major corporate clients using the Windows operating systems and .NET platform ( ASP.NET, C# , VB.NET).I have single and multi-threaded code development experience, as well as experience developing database and enterprise level distributed applications.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 5 PinmemberAnkur11june22 Jan '13 - 2:34 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130523.1 | Last Updated 2 Oct 2012
Article Copyright 2012 by Rajesh Varma Buddaraju
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid