private EmployeeOP GetNewEmployee()
        {
            // Creates a new employee
            EmployeeOP oEmp = new EmployeeOP();

            objPool.Enqueue(oEmp);
            return(oEmp);
        }
        protected EmployeeOP RetrieveFromPool()
        {
            EmployeeOP oEmp;

            // if there is any objects in my collection
            if (objPool.Count > 0)
            {
                oEmp = (EmployeeOP)objPool.Dequeue();
                EmployeeOP.Counter--;
            }
            else
            {
                // return a new object
                oEmp = new EmployeeOP();
            }
            return(oEmp);
        }
        static void MainOP(string[] args)
        {
            Factory fa = new Factory();

            EmployeeOP myEmp = fa.GetEmployee();

            Console.WriteLine("First object");

            EmployeeOP myEmp1 = fa.GetEmployee();

            Console.WriteLine("Second object");

            EmployeeOP myEmp3 = fa.GetEmployee();

            Console.WriteLine("Existing object");

            Console.ReadKey();
        }