Wednesday, 23 November 2016

Factory Dessign Pattern

Step1: Create a console project in visual studio
step2: create a class Dream and replace the class with the following code.

Story:
    //One rich guy has 4 kinds of vehicles, He has an habit riding in dream, He chooses one vehicle among those he own and goes for night ride.

When?

    //When  to go for Factory Design pattern ?
    //Ans:
    // If you want to create an object at run time dynamically based on some flag
    // The creation of object is done when it is required.
    // create object without exposing the creation logic.
    /// <summary>
    /// When to use Factory Pattern
    ///
    /// Subclasses figure out what objects should be created.
    /// Parent class allows later instantiation to subclasses means the creation of object is done when it is required.
    /// The process of objects creation is required to centralize within the application.
    /// class (creator) will not know what classes it will be required to create.
    /// </summary>
    ///


How?

Method1: Implement the above scenario without any factory.


  class BiCycle
    {
        public void RideVehicle()
        {
            Console.WriteLine("Ride Bicycle at 20 kmph");
            describeBicycle();
        }
        public void describeBicycle()
        {
            Console.WriteLine("bicycle has handle and breaks to control speed");
        }
    }
    class Scooter
    {
        public void RideVehicle()
        {
            Console.WriteLine("Ride Bicycle at 80 kmph");
            describeScooter();
        }
        public void describeScooter()
        {
            Console.WriteLine("Scooter has handle , breaks, Gear system to control speed");
        }
    }
    class Car
    {
        public void RideVehicle()
        {
            Console.WriteLine("Ride Bicycle at 100 kmph");
            describeCar();
        }
        public void describeCar()
        {
            Console.WriteLine("Car has Steering , breaks, Gear system to control speed");
        }
    }
    class Helicopter
    {
        public void RideVehicle()
        {
            Console.WriteLine("Ride Bicycle at 150 kmph");
            describeCopter();
        }
        public void describeCopter()
        {
            Console.WriteLine("Copter has Steering , cookpit voice control,GPS , Gear system to control speed");
        }
    }
   
    class Dream
    {
        static void Main()
        {
        
            Console.WriteLine("He is dreeming... and choose a vehicle....");
            string choosenVehicle = Console.ReadLine();
            if (choosenVehicle == "b")
            {
                var b = new BiCycle();
                b.RideVehicle();
            }
            else if (choosenVehicle == "s")
            {
                var s = new Scooter();
                s.RideVehicle();
            }
            else if (choosenVehicle == "c")
            {
                var c = new Car();
                c.RideVehicle();
            }
            else if (choosenVehicle == "h")
            {
                var h = new Helicopter();
                h.RideVehicle();
            }
        }
    }








//Method2: Implement the same with factory pattern



    public interface IVehicle
    {
        void RideVehicle();
    }
    class BiCycle : IVehicle
    {
        public void RideVehicle()
        {
            Console.WriteLine("Ride Bicycle at 20 kmph");
            describeBicycle();
        }
        public void describeBicycle()
        {
            Console.WriteLine("bicycle has handle and breaks to control speed");
        }
    }
    class Scooter : IVehicle
    {
        public void RideVehicle()
        {
            Console.WriteLine("Ride Bicycle at 80 kmph");
            describeScooter();
        }
        public void describeScooter()
        {
            Console.WriteLine("Scooter has handle , breaks, Gear system to control speed");
        }
    }
    class Car : IVehicle
    {
        public void RideVehicle()
        {
            Console.WriteLine("Ride Bicycle at 100 kmph");
            describeCar();
        }
        public void describeCar()
        {
            Console.WriteLine("Car has Steering , breaks, Gear system to control speed");
        }
    }
    class Helicopter : IVehicle
    {
        public void RideVehicle()
        {
            Console.WriteLine("Ride Bicycle at 150 kmph");
            describeCopter();
        }
        public void describeCopter()
        {
            Console.WriteLine("Copter has Steering , cookpit voice control,GPS , Gear system to control speed");
        }
    }
    public class DecideVehicle
    {
        private IVehicle vehicle;
        public IVehicle DreemVehicle(string vName)
        {
            switch (vName)
            {
                case "b":
                    vehicle = new BiCycle();
                    break;
                case "s":
                    vehicle = new Scooter();
                    break;
                case "c":
                    vehicle = new Car();
                    break;
                case "h":
                    vehicle = new Helicopter();
                    break;
                default:
                    vehicle = new Scooter();
                    break;
            }
            return vehicle;
        }
    }
    class Dream
    {
        static void Main()
        {
            DecideVehicle decideVehicle = new DecideVehicle();
            int contine = 0;
            do
            {
                Console.WriteLine("He is dreeming... and choose a vehicle....");
                string choosenVehicle = Console.ReadLine();
                IVehicle vehicle;
                vehicle = decideVehicle.DreemVehicle(choosenVehicle);
                vehicle.RideVehicle();
                Console.WriteLine("Do you want to continue ride press 1 then ?");
                contine = int.Parse(Console.ReadLine());
            } while (contine == 1);
       
        }
    }



I hope this is usefull....

No comments :

Post a Comment