示例#1
0
 public OrderCalculator2(
     ICanDiscountStrategy canDiscountStrategy,
     IDiscountStrategy discountStrategy)
 {
     this.canDiscountStrategy = canDiscountStrategy;
     this.discountStrategy    = discountStrategy;
 }
 public static void Apply(this IList <Product> products, IDiscountStrategy discountStrategy)
 {
     foreach (Product p in products)
     {
         p.Price.SetDiscountStrategyTo(discountStrategy);
     }
 }
示例#3
0
 public Campaign(Category category, uint minItems, decimal discountQuantity, IDiscountStrategy discountStrategy)
 {
     Category         = category;
     MinimumItems     = minItems;
     DiscountStrategy = discountStrategy;
     DiscountQuantity = discountQuantity;
 }
 public static void Apply(this IList<Product> products,IDiscountStrategy discountStrategy)
 {
     foreach (Product p in products)
     {
         p.Price.SetDiscountStrategyTo(discountStrategy);
     }
 }
 public OrderDiscountCalculator(
     IRuleStrategy ruleStrategy,
     IDiscountStrategy discountStrategy
     )
 {
     this.ruleStrategy     = ruleStrategy;
     this.discountStrategy = discountStrategy;
 }
 /// <summary>
 /// 为所有传入的 产品 对象 赋予统一的折扣策略(传入的discountStrategy)
 /// </summary>
 /// <param name="products"></param>
 /// <param name="discountStrategy"></param>
 public static void Apply(this IList <Product> products, IDiscountStrategy discountStrategy)
 {
     //为所有传入的 产品 对象 赋予统一的折扣策略(传入的discountStrategy)
     foreach (Product p in products)
     {
         p.Price.SetDiscountStrategyTo(discountStrategy);
     }
 }
        public IList <Product> GetAllProductsFor(CustomerType customerType)
        {
            IDiscountStrategy discountStrategy = DiscountFactory.GetDiscountStrategyFor(customerType);
            IList <Product>   products         = _productRepository.FindAll();

            products.Apply(discountStrategy);
            return(products);
        }
示例#8
0
        protected override void TestSetUp()
        {
            IDiscountStrategy tieredDiscountStrategy = DiscountStrategyBuilder.BuildTieredStrategy()
                                                       .Where.OrdersGreaterThanOrEqualTo(100.dollars()).GetDiscountOf(10.Percent())
                                                       .Build();

            _calculator = new DiscountCalculator(tieredDiscountStrategy);
        }
        public When_calculating_a_tiered_discount()
        {
            IDiscountStrategy tieredDiscountStrategy = DiscountStrategyBuilder.BuildTieredStrategy()
                                                       .Where.OrdersGreaterThanOrEqualTo(100.dollars()).GetDiscountOf(10.Percent())
                                                       .Build();

            _calculator = new DiscountCalculator(tieredDiscountStrategy);
        }
示例#10
0
        public IList <Product> GetProductsFor(CustomerType type)
        {
            IDiscountStrategy strategy = DiscountFactory.GetDiscountStrategy(type);
            IList <Product>   products = _repository.FindAll();

            products.ApplyDiscountStrategy(strategy);
            return(products);
        }
示例#11
0
        public void Start()
        {
            discountStrategy = new FirstGuestDiscountStrategy();
            Calculator calculator = new Calculator(discountStrategy);

            items = CreateItems();
            Console.WriteLine(calculator.Calculate(items));
        }
示例#12
0
        public void ApplyStrategy(IDiscountStrategy strategy)
        {
            Console.WriteLine("Price before offer: " + price);

            double finalPrice = price - (price * strategy.GetDiscountPercetange());

            Console.WriteLine("Price after offer: " + finalPrice);
        }
 public static void Apply(this IList<Product> products, IDiscountStrategy discountStrategy)
 {
     foreach (Product p in products)
     {
         // just setting discount strategy property
         p.Price.SetDiscountStrategyTo(discountStrategy);
     }
 }
示例#14
0
        public IList <Product> GetAllProductsFor(CustomerType customerType)
        {
            IDiscountStrategy _discountStrategy = DiscountFactory.GetDiscountStrategyFor(customerType);
            IList <Product>   _productList      = _productRepository.FindAll();

            if (_productList != null)
            {
                _productList.Apply(_discountStrategy);
            }
            return(_productList);
        }
示例#15
0
        /// <summary>
        /// 为全部产品赋予指定的折扣策略
        /// </summary>
        /// <param name="customerType"></param>
        /// <returns></returns>
        public IList <Product> GetAllProductsFor(CustomerType customerType)
        {
            //1 根据传入的值通过 工厂模式去创建对应的折扣策略
            IDiscountStrategy discountStrategy = DiscountFactory.GetDiscountStrategyFor(customerType);

            //2 获取产品仓库中的全部集合
            IList <Product> products = _productRepository.FindAll();

            //3 为产品仓库赋予折扣策略
            products.Apply(discountStrategy);

            return(products);
        }
示例#16
0
        public bool UpdateProductsFor(CustomerType customerType, IList <Product> productList)
        {
            IDiscountStrategy _discountStrategy = DiscountFactory.GetDiscountStrategyFor(customerType);

            try
            {
                _productRepository.Update(productList);
                return(true);
            }
            catch
            {
                return(false);
            }
        }
示例#17
0
        public double GetFinalDiscountPrice()
        {
            switch (CustomerType)
            {
            case CustomerType.PremiumCustomer:
                _discountStrategy = new PremiumDiscount();
                break;

            case CustomerType.NonPremiumCustomer:
                _discountStrategy = new NonPremiumDiscount();
                break;
            }
            return(_discountStrategy.GetDiscountedBillAount(BillAount));
        }
示例#18
0
        private void calcDiscButton_Click(object sender, EventArgs e)
        {
            int i = 0;

            checks.ForEach(x => i += x.Checked ? 1 : 0);
            if (i == 0)
            {
                return;
            }

            IDiscountStrategy disc_strat = null;

            if (i == 1)
            {
                if (chkAE.Checked)
                {
                    disc_strat = new AcademicExcellenceDiscount();
                }
                else if (chkAM.Checked)
                {
                    disc_strat = new AboriginalMinorityDiscount();
                }
                else // if (chkFF.Checked)
                {
                    disc_strat = new FreedomFighterDiscount();
                }
            }
            else
            {
                CompositeDiscount ds = new CompositeDiscount(comboBox1.Text);
                if (chkAE.Checked)
                {
                    ds.addDiscount(new AcademicExcellenceDiscount());
                }
                if (chkAM.Checked)
                {
                    ds.addDiscount(new AboriginalMinorityDiscount());
                }
                if (chkFF.Checked)
                {
                    ds.addDiscount(new FreedomFighterDiscount());
                }
                disc_strat = ds;
            }
            rcc.getRegistration().setDiscountStrategy(disc_strat);
            GetChanged(rcc.getRegistration());
            Program.play = true;
        }
示例#19
0
        public static void Test()
        {
            Customer customer = new Customer("Anna", "Kowalska");
            Order    order    = CreateOrder(customer);

            ICanDiscountStrategy canDiscountStrategy = new HappyHoursCanDiscountStrategy(TimeSpan.Parse("9:30"), TimeSpan.Parse("16"));
            IDiscountStrategy    discountStrategy    = new PercentageDiscountStrategy(0.1m);

            // PMC> Install-Package Newtonsoft.Json
            string            jsonDiscountStrategy = JsonConvert.SerializeObject(discountStrategy);
            IDiscountStrategy discountStrategy2    = JsonConvert.DeserializeObject <PercentageDiscountStrategy>(jsonDiscountStrategy);

            OrderDiscountCalculator discountCalculator = new OrderDiscountCalculator(canDiscountStrategy, discountStrategy);

            decimal discount = discountCalculator.CalculateDiscount(order);
        }
示例#20
0
 public RefactoredProductClass(
     IDiscountRepository discountRepository,
     IDiscountStrategy discountStrategy)
 {
     if (discountRepository == null)
     {
         throw new
               ArgumentNullException(nameof(discountRepository));
     }
     if (discountStrategy == null)
     {
         throw new
               ArgumentNullException(nameof(discountStrategy));
     }
     _discountRepository = discountRepository;
     _discountStrategy   = discountStrategy;
 }
示例#21
0
        /// <summary>
        /// Main basket items processing method. It's idemopotent.
        /// </summary>
        public void Checkout()
        {
            SkuEntity     skuEntity;
            IBasketParser basketParser = BasketParser.Create(basketFilePath);

            receiptLineItems = new List <Entities.LineItem>();

            // Iterate through each item in the basket
            while (basketParser.MoveNext())
            {
                basketItem = basketParser.Current;

                skuEntity = this.catalogModel.Find(basketItem.Sku);

                if (skuEntity != null)
                {
                    // Add regular line item
                    receiptLineItems.Add(new LineItem
                    {
                        LineItemType = DiscountTypes.noDiscount,
                        Label        = skuEntity.Label,
                        Price        = skuEntity.Price,
                        Qty          = basketItem.Qty,
                        Sku          = skuEntity.Id,
                        Total        = basketItem.Qty * skuEntity.Price
                    });

                    // Add discount line item (automatically determined by the appropriate discount strategy for the item)
                    IDiscountStrategy discountStrategy
                        = DiscountStrategy.Instance.Create(skuEntity.DiscountType);

                    // Create the discount line item if any
                    LineItem discountLineItem =
                        discountStrategy.GenerateDiscountLineItem(skuEntity, basketItem);

                    if (discountLineItem != null)
                    {
                        receiptLineItems.Add(discountLineItem);
                    }
                }
            }

            // Reset discount strategies to get them ready for next basket checkout
            DiscountStrategy.Instance.Reset();
        }
示例#22
0
        public ProductListResponse GetAllProductsFor(ProductListRequest request)
        {
            ProductListResponse productListResponse = new ProductListResponse();

            try
            {
                IDiscountStrategy discountStrategy = DiscountFactory.GetDiscountStrategyFor(request.CustomerType);
                IList <Product>   products         = _productRepository.FindAll();
                products.Apply(discountStrategy);

                productListResponse.Products = products.ConvertToProductListViewModel();
                productListResponse.Success  = true;
            }
            catch (Exception ex)
            {
                productListResponse.Success = false;
                productListResponse.Message = ex.Message;
            }

            return(productListResponse);
        }
 /// <summary>
 /// When you instantiate a price class, it defaults to doing nothing (returning the same cost).
 /// </summary>
 public Price()
 {
     _discountStrategy = new NullDiscountStrategy();
 }
示例#24
0
 public void addDiscount(IDiscountStrategy ids)
 {
     discounts.Add(ids);
     //MessageBox.Show("Discount added successfully");
 }
 public DiscountContext(IDiscountStrategy strategy)
 {
     this.strategy = strategy;
 }
 public DiscountContext(IDiscountStrategy strategy)
 {
     this.strategy = strategy;
 }
示例#27
0
 public void setDiscountStrategy(IDiscountStrategy ids)
 {
     discountStrategy = ids;
 }
 /// <summary>
 /// Swaps out and recalculates the cost of a given Price through the applied discount algorithm
 /// </summary>
 /// <param name="discountStrategy"></param>
 public void SetAndApplyDiscountStrategy(IDiscountStrategy discountStrategy)
 {
     _discountStrategy = discountStrategy;
     this.DiscountedCost = _discountStrategy.ApplyDiscount(this.Cost);
 }
 public void SetDiscountStrategyTo(IDiscountStrategy DiscountStrategy)
 {
     _discountStrategy = DiscountStrategy;
 }
示例#30
0
 public void SetDiscountStrategyTo(IDiscountStrategy discountStrategy)
 {
     this.discountStrategy = discountStrategy;
 }
示例#31
0
 public ShoppingMall(IDiscountStrategy discountStrategy)
 {
     CurrentStrategy = discountStrategy;
 }
示例#32
0
 public void SetDiscountStrategyTo(IDiscountStrategy discountStrategy)
 {
     this._discountStrategy = discountStrategy;
 }
 public BasketApplyDiscount(IDiscountStrategy discountStrategy)
 {
     _discountStrategy = discountStrategy;
 }
 public DiscountContext(IDiscountStrategy discountStrategy)
 {
     _discountStrategy = discountStrategy;
 }
示例#35
0
 public PricingCalculator(ShoppingCart cart, IDiscountStrategy discountStrategy)
 {
     _cart = cart;
     _discountStrategy = discountStrategy;
 }
 public OrderCalculator(IValidatorStrategy validatorStrategy, IDiscountStrategy discountStrategy)
 {
     this.validatorStrategy = validatorStrategy;
     this.discountStrategy = discountStrategy;
 }
示例#37
0
 public DiscountOrderCalculator(IDiscountStrategy discountStrategy)
 {
     this.discountStrategy = discountStrategy;
 }
示例#38
0
 protected Discount(IDiscountStrategy discountStrategy)
 {
     DiscountStrategy = discountStrategy;
 }
 public static IEnumerable<Event> ApplyDiscount(this IEnumerable<Event> events, IDiscountStrategy discountStrategy)
 {
     foreach (Event e in events)
         e.TicketPrice.SetAndApplyDiscountStrategy(discountStrategy);
     return events;
 }
示例#40
0
 public void SetDiscountStrategyTo(IDiscountStrategy DiscountStrategy)
 {
     _discountStrategy = DiscountStrategy;
 }
示例#41
0
		public DiscountCalculator( IDiscountStrategy discountStrategy )
		{
			_discountStrategy = discountStrategy;
		}