Factory

 Rate It (5)

Factory

The job of the Factory design pattern is to create concrete sub classes. You can see the Factory desing pattern used throughout the .NET Framework.

A C# example of the Factory Pattern

// A Simple Interface

public interface IVehicle

{

    void Drive(int miles);

}

 

// The Vehicle Factory

public class VehicleFactory

{

    public static IVehicle getVehicle(string Vehicle)

    {

        switch (Vehicle) {

            case "Car":

                return new Car();

            case "Lorry":

                return new Lorry();

            default:

                throw new ApplicationException(string.Format("Vehicle '{0}' cannot be created", Vehicle));

                break;

        }

    }

}

 

// A Car Class that Implements the IVehicle Interface

public class Car : IVehicle

{

    public void IVehicle.Drive(int miles)

    {

        // Drive the Car

    }

}

 

// A Lorry Class that Implements the IVehicle Interface

public class Lorry : IVehicle

{

    public void IVehicle.Drive(int miles)

    {

        // Drive the Lorry

    }

}

A VB example of the Factory Pattern

' A Simple Interface

Public Interface IVehicle

    Sub Drive(ByVal miles As Integer)

 

End Interface

 

' The Vehicle Factory

Public Class VehicleFactory

    Public Shared Function getVehicle(ByVal Vehicle As String) As IVehicle

 

        Select Case Vehicle

            Case "Car"

                Return New Car

            Case "Lorry"

                Return New Lorry

            Case Else

                Throw New ApplicationException(String.Format("Vehicle '{0}' cannot be created", Vehicle))

        End Select

 

    End Function

End Class

 

' A Car Class that Implements the IVehicle Interface

Public Class Car

    Implements IVehicle

    Public Sub Drive(ByVal miles As Integer) Implements IVehicle.Drive

        ' Drive the Car

    End Sub

End Class

 

' A Lorry Class that Implements the IVehicle Interface

Public Class Lorry

    Implements IVehicle

    Public Sub Drive(ByVal miles As Integer) Implements IVehicle.Drive

        ' Drive the Lorry

    End Sub

End Class

UML

Factory Design Pattern

Articles

 

Revision number 6, Friday, July 18, 2008 9:11:24 PM by
This is not the most up to date version of this article. The most recent version can be found here.

Comments

I already heard about Factory objects. This article having the code is very useful. Thanks Saravanan

A good option while implementing in .Net is to make the individual implementation Car / Lorry as internal. This enforces the user to use the factory method.

Really nice example !

Great Effort! I would recommend a book i.e Head First Design Patterns.

How would the implementation look? public class Main { IVehicle vehicle = VehicleFactory.getVehicle("car"); vehicle.Drive(1000); } the vehicle.Drive() doesn't work, but it seems like it would.

Good example. However, I suggest to include an example of implementation will make this complete. (Look at the bbaxter's comments)

Shortcuts

Table of Contents

Top Wiki Contributors

(last 30 days)

  1. mbanavige (5)
  2. SGWellens (4)
  3. maartenba (2)
  4. rami_nassar (2)
  5. stiansol (2)
  6. MisterFantastic (2)
  7. satish1.v (1)
  8. raklos (1)
  9. mosessaur (1)
  10. Jos Branders (1)

Advertise Here

Microsoft Communities
Page view counter