public void Test()
        {
            // 生成操作对象实例
            IHandler handler1 = new InternalHandler();
            IHandler handler2 = new DiscountHandler();
            IHandler handler3 = new MailHandler();
            IHandler handler4 = new RegularHandler();

            // 组装链式的结构  internal-> mail-> discount-> regular-> null
            handler1.Successor = handler3;
            handler3.Successor = handler2;
            handler2.Successor = handler4;
            IHandler head = handler1;

            Request request = new Request(20, PurchaseType.Mail);

            head.HandleRequest(request);
            Assert.AreEqual <double>(20 * 1.3, request.Price);

            // 重新组织链表结构
            handler1.Successor = handler1.Successor.Successor;  // 短路掉Discount
            request            = new Request(20, PurchaseType.Discount);
            head.HandleRequest(new Request(20, PurchaseType.Discount));
            Assert.AreEqual <double>(20, request.Price);    // 确认被短路的部分无法生效
        }
示例#2
0
    static void Main()
    {
        double          saleAmount;
        char            code;
        DiscountHandler firstDel, secondDel, thirdDel;

        firstDel  = new DiscountHandler(StandardDiscount);
        secondDel = new DiscountHandler(PreferredDiscount);
        thirdDel  = firstDel + secondDel;

        Write("Enter amount of sale: ");
        saleAmount = Convert.ToDouble(ReadLine());
        Write("Enter \'S\' for standard discount, \'P\' for preferred discount,\nor \'X\' for eXtreme discount: ");
        code = Convert.ToChar(ReadLine());
        if (code == 'S')
        {
            firstDel(ref saleAmount);
        }
        else
        {
            if (code == 'P')
            {
                secondDel(ref saleAmount);
            }
            else
            {
                thirdDel(ref saleAmount);
            }
        }
        WriteLine("New sale amount int: {0}", saleAmount.ToString("C2"));
    }
        public void ApplyDiscount(IDiscount discount, ref IArticle article)
        {
            ValidateInput(discount, article);
            string userInput       = GetUserInput();
            var    discountHandler = new DiscountHandler(r => userInput == "Yes", ExecuteDiscount);

            discountHandler.Discount(discount, article);
        }
示例#4
0
        public void ApplyDiscount(IDiscount discount, ref IArticle article)
        {
            ValidateInput(discount, article);
            var castedDiscount  = discount as PeriodDiscount;
            var discountHandler = new DiscountHandler(r => IsBetweenDate(castedDiscount.StartDate, castedDiscount.EndDate), ExecuteDiscount);

            discountHandler.Discount(discount, article);
        }
示例#5
0
 public void ProductStorageLifeEnd(object source, DiscountHandler e)
 {
     if (e.StorageLife == 0)
     {
         JournalEntryProduct je = new JournalEntryProduct(e.Message, e.Price, e.Discount, e.StorageLife, e.Product);
         DeadProducts.Add(je);
     }
 }
示例#6
0
        public static void Execute()
        {
            var handler3 = new DiscountHandler("3", 200, 6000);
            var handler2 = new DiscountHandler("2", 100, 8000, handler3);
            var handler1 = new DiscountHandler("1", 100, 10000, handler2);

            Console.WriteLine(handler1.Discount(250, 8000));
            Console.WriteLine(handler1.Discount(1000, 16000));
            Console.WriteLine(handler3.Discount(300, 10000));
        }
示例#7
0
 private void IncrementDiscountCounter(int _ProfileID, int _CouponID)
 {
     try
     {
         DiscountHandler handler = new DiscountHandler();
         handler.IncrementDiscountCounter(_ProfileID, _CouponID);
     }
     catch (Exception ex)
     {
     }
 }
 private void IncrementDiscountCounter(int _ProfileID, int _CouponID)
 {
     try
     {
         DiscountHandler handler = new DiscountHandler();
         handler.IncrementDiscountCounter(_ProfileID, _CouponID);
     }
     catch (Exception ex)
     {
         lblSystemMessage.Text = ex.Message;
     }
 }
        public void EligibleForDiscount_NameNotStartsWithA_ReturnsFalse()
        {
            DiscountHandler handler = new DiscountHandler();

            string name1 = "Bob Anthony";
            string name2 = " curt Alanson";

            bool discounted1 = handler.EligibleForDiscount(name1);
            bool discounted2 = handler.EligibleForDiscount(name2);

            Assert.IsFalse(discounted1, $"Expected name: {name1} to not be eligible for a discount");
            Assert.IsFalse(discounted2, $"Expected name: {name2} to not be eligible for a discount");
        }
        public void EligibleForDiscount_NameStartsWithA_ReturnsTrue()
        {
            DiscountHandler handler = new DiscountHandler();

            string name1 = "Adam Smith";
            string name2 = " alan Curtis ";

            bool discounted1 = handler.EligibleForDiscount(name1);
            bool discounted2 = handler.EligibleForDiscount(name2);

            Assert.IsTrue(discounted1, $"Expected name: {name1} to be eligible for a discount");
            Assert.IsTrue(discounted2, $"Expected name: {name2} to be eligible for a discount");
        }
示例#11
0
        public void StartDiscountFunctionsTest()
        {
            // Arrange
            IDiscountHandler discountHandler    = new DiscountHandler();
            IDiscountHandler discountHandlerSec = new DiscountHandler(10M);
            ShipmentHandler  shipmentHandler    = new ShipmentHandler();
            var shipment    = shipmentHandler.CreateShipment("2015-02-01 S MR");
            var shipmentSec = shipmentHandler.CreateShipment("2015-02-01 S MR");

            // Act
            discountHandler.StartDiscountFunctions(shipment, 3M);
            discountHandlerSec.StartDiscountFunctions(shipmentSec, 3M);

            // Assert
            Assert.AreEqual(shipment.ToString(), shipmentSec.ToString());
        }
示例#12
0
        public void Test()
        {
            // 生成操作对象实例
            IHandler handler1 = new InternalHandler();
            IHandler handler2 = new DiscountHandler();
            IHandler handler3 = new MailHandler();
            IHandler handler4 = new RegularHandler();

            //// 组装链式的结构  internal-> mail-> discount-> regular-> null
            handler1.AddSuccessor(handler2);
            handler2.AddSuccessor(handler3);
            handler2.AddSuccessor(handler4);
            IHandler head = handler1;

            Request request = new Request(20, PurchaseType.Mail);

            head.HandleRequest(request);
            Assert.AreEqual <double>(20 * 1.3, request.Price);
        }
示例#13
0
        static void Main(string[] args)
        {
            IHandler handler1 = new InternalHandler();
            IHandler handler2 = new DiscountHandler();
            IHandler handler3 = new MailHandler();
            IHandler handler4 = new RegularHandler();

            handler1.Next = handler3;
            handler3.Next = handler2;
            handler2.Next = handler4;

            IHandler head    = handler1;
            Request  request = new Request(20, PurchaseType.Mail);

            head.HandleRequest(request);
            Console.Write(request.Price); //26

            //将MailHandler短路
            handler1.Next = handler1.Next.Next;
            request       = new Request(20, PurchaseType.Mail);
            head.HandleRequest(request);
            Console.Write(request.Price); //20
        }
        public void Test()
        {
            // 生成操作对象实例、组装链式结构
            IHandler handler1 = new InternalHandler();
            IHandler handler2 = new DiscountHandler();
            IHandler handler3 = new MailHandler();
            IHandler handler4 = new RegularHandler();

            handler1.Successor = handler3;
            handler3.Successor = handler2;
            handler2.Successor = handler4;
            IHandler head = handler1;

            handler1.HasBreakPoint = true;
            handler1.Break        += this.Break;
            handler3.HasBreakPoint = true;
            handler3.Break        += this.Break;

            Request request = new Request(20, PurchaseType.Regular);

            head.HandleRequest(request);
            currentType = PurchaseType.Internal;    // 为第一个断点做的准备
            Assert.AreEqual <double>(20, request.Price);
        }
示例#15
0
        public void ProductDiscountChanged(object source, DiscountHandler e)
        {
            JournalEntryProduct je = new JournalEntryProduct(e.Message, e.Price, e.Discount, e.StorageLife, e.Product);

            JournalEntryProducts.Add(je);
        }