The factory method pattern defines an interface for creating an object, but let subclasses decides which class to instantiate.
The Class digram

The implementation
- Vehicle Factory :- Abstract Factory
public abstract class VehicleFactory
{
public enum VehicleType
{
Car,
Bicycle
}
public abstract Vehicle CreateVehicle(VehicleType vehicleType);
public Vehicle OrderVehicle(VehicleType vehicleType)
{
Console.WriteLine("You are Ordering a " + vehicleType);
return CreateVehicle(vehicleType);
}
}
- Bicycle, Car Factory :- Concrete Factory
public class BicycleFactory : VehicleFactory
{
public override Vehicle CreateVehicle(VehicleType vehicleType)
{
Console.WriteLine("Creating a " + vehicleType);
return new MotorBicycle();
}
}
public class CarFactory : VehicleFactory
{
public override Vehicle CreateVehicle(VehicleType vehicleType)
{
Console.WriteLine("Creating a " + vehicleType);
return new Car();
}
}
public abstract class Vehicle
{
private int _engineCapacity;
private int _noOfWheels;
public int EngineCapacity
{
get
{
return _engineCapacity;
}
set
{
_engineCapacity = value;
}
}
public int NoOfWheels
{
get
{
return _noOfWheels;
}
set
{
_noOfWheels = value;
}
}
public abstract void Accelerate();
public abstract void Break();
}
public class MotorBicycle : Vehicle
{
public MotorBicycle()
{
base.EngineCapacity = 100;
base.NoOfWheels = 2;
}
public override void Accelerate()
{
Console.WriteLine("Accelerating with Handle");
}
public override void Break()
{
Console.WriteLine("Stopping with Handle");
}
}
public class Car : Vehicle
{
public Car()
{
base.EngineCapacity = 300;
base.NoOfWheels = 4;
}
public override void Accelerate()
{
Console.WriteLine("Accelerating with Paddle");
}
public override void Break()
{
Console.WriteLine("Stopping with Paddle");
}
}
- Prorgam :- Cleint
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Creating a Motor Bicycle");
VehicleFactory bicycleFactory = new BicycleFactory();
Vehicle motorBicycle = bicycleFactory.CreateVehicle(VehicleFactory.VehicleType.Bicycle);
Console.WriteLine("Got a " + motorBicycle.GetType() + " with EngineCapacity " + motorBicycle.EngineCapacity + " and " + motorBicycle.NoOfWheels + " wheels.");
motorBicycle.Accelerate();
motorBicycle.Break();
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine("Creating a Car");
VehicleFactory carFactory = new CarFactory();
Vehicle car = carFactory.CreateVehicle(VehicleFactory.VehicleType.Car);
Console.WriteLine("Got a " + car.GetType() + " with EngineCapacity " + car.EngineCapacity + " and " + car.NoOfWheels + " wheels.");
car.Accelerate();
car.Break();
Console.ReadLine();
}
}
2 comments:
nice explanation...
The best explanation that I found so far about this pattern, thank you very much
Post a Comment