public void Can_DiscountA_ApplyDiscount()
        {
            DiscountA dis = new DiscountA();

            decimal res = dis.ApplyDiscount(100);

            Assert.AreEqual(90, res);
        }
Example #2
0
        static void Main(string[] args)
        {
            /*策略模式   实际应用时,可以与简单工厂配合使用,或者将具体实现类配置保存在配置文件中
             *
             * (1)提供了对开闭原则的完美支持,用户可以在不修改原有系统的基础上选择具体算法或行为,也可以灵活地增加新的算法或行为。
             *
             *             (2)避免了多重的if-else条件选择语句,利于系统的维护。
             *
             *             (3)提供了一种算法的复用机制,不同的环境类可以方便地复用这些策略类。*/
            IDiscount discountA = new DiscountA();
            var       price     = discountA.Calculate(18);

            Console.WriteLine(price);
            IDiscount discountB = new DiscountB();

            price = discountB.Calculate(18);
            Console.WriteLine(price);
            Console.ReadKey();
        }
        public List <ProductDetail> GetProductDetails(List <Cart> cartItems, List <Product> products)
        {
            var productDetails = new List <ProductDetail>();

            foreach (var item in cartItems)
            {
                if (products.Any(x => x.Name == item.Product))
                {
                    var product       = products.First(x => x.Name == item.Product);
                    var productDetail = new ProductDetail();
                    productDetail.Product  = item.Product;
                    productDetail.Quantity = item.Quantity;
                    productDetail.Price    = product.Price;


                    //ProcessDiscountLogic
                    IDiscount discount = new NoDiscount();
                    switch (product.DiscountType)
                    {
                    case "DiscountA":
                        discount = new DiscountA();
                        break;

                    case "DiscountB":
                        discount = new DiscountB();
                        break;

                    case "DiscountCD":
                        discount = new DiscountCD();
                        break;

                    default:
                        break;
                    }

                    productDetail.Price = discount.ApplyDiscount(productDetail);

                    productDetails.Add(productDetail);
                }
            }
            return(productDetails);
        }