static void Main()
        {
            AbstractApprover petar = new Menager();
            AbstractApprover dimitar = new DivisionManager();
            AbstractApprover ivan = new ExecutiveDirector();

            //set successors
            petar.SetSuccessor(dimitar);
            dimitar.SetSuccessor(ivan);

            Order smallOrder = new Order(1, 999.99, "Water delivering");
            petar.ProcessRequest(smallOrder);

            Order mediumOrder = new Order(2, 1001, "Fuel delivering");
            petar.ProcessRequest(mediumOrder);

            Order bigOrder = new Order(3, 9999, "Oil delivering");
            petar.ProcessRequest(bigOrder);

            Order specialOrder = new Order(4, 10001, "Tanker delivering");
            petar.ProcessRequest(specialOrder);

            Order nullOrder = new Order(5, null, "Test null order");
            petar.ProcessRequest(nullOrder);
        }
 public override void ProcessRequest(Order order)
 {
     if (order.Amount < 10000)
     {
         Console.WriteLine("{0} approved order #{1}, for amount of {2}, purpose {3}",
             this.GetType().Name, order.Number, order.Amount, order.Purpose);
     }
     else if (order.Amount != null)
     {
         Console.WriteLine("The amount is exceeding 10 000 units! Please, wait for our special offer!");
     }
     else
     {
         Console.WriteLine("Your order is invalid");
     }
 }
 public override void ProcessRequest(Order order)
 {
     if (order.Amount < 5000)
     {
         Console.WriteLine("{0} approved order #{1}, for amount of {2}, purpose {3}",
             this.GetType().Name, order.Number, order.Amount, order.Purpose);
     }
     else if (order.Amount != null)
     {
         successor.ProcessRequest(order);
     }
     else
     {
         Console.WriteLine("Your order is invalid");
     }
 }
 public abstract void ProcessRequest(Order order);