コード例 #1
0
ファイル: ReceiptPrinter.cs プロジェクト: mokeev1995/test1
        public void Print(ICartState cart)
        {
            var culture = CultureInfo.GetCultureInfo("en-us");

            Console.WriteLine();
            Console.WriteLine(new string('-', 100));

            foreach (var product in cart.Products)
            {
                var itemPrice = product.Key.Price;
                if (cart.ProductDiscounts.ContainsKey(product.Key))
                {
                    var discount = cart.ProductDiscounts[product.Key];
                    itemPrice = discount.Make();
                }

                var totalPrice   = (itemPrice * product.Value).ToString("C", culture);
                var itemPriceStr = product.Key.Price.ToString("C", culture);
                Console.WriteLine($"{product.Key}\n\tCount: {product.Value}\t Price: {itemPriceStr} \t Total: {totalPrice}");
            }

            Console.WriteLine(new string('-', 25));
            Console.WriteLine($"Total: {cart.Total.ToString("C", culture)}");

            Console.WriteLine(new string('-', 100));
            Console.WriteLine();
        }
コード例 #2
0
 public ICartState TransitionAddProduct(ICartState currentState, Product product)
 {
     return currentState.Transition(
         cartStateEmpty => cartStateEmpty.Add(product),
         cartStateActive => cartStateActive.Add(product),
         cartStatePaid => cartStatePaid);
 }
コード例 #3
0
        public void Execute()
        {
            _state = _cart.CurrentState.Clone();

            var discount = new ProductDiscount(_product, _percentValue);

            _cart.AddDiscount(discount, _product);
        }
コード例 #4
0
        public ICartState TransitionAddProduct(ICartState currentState, Product product)
        {
            var cartStateEmpty = currentState as CartStateEmpty; //CAST!
            if (cartStateEmpty != null)
            {
                return cartStateEmpty.Add(Product.ProductY);
            }

            var cartStateActive = currentState as CartStateActive; //CAST!
            if (cartStateActive != null)
            {
                return cartStateActive.Add(Product.ProductY);
            }

            return currentState;
        }
コード例 #5
0
 public void Execute()
 {
     _state = _cart.CurrentState.Clone();
     _cart.AddProduct(_product, _count);
 }
コード例 #6
0
 public void Execute()
 {
     _state = _cart.CurrentState.Clone();
     _cart.AddDiscount(new CartDiscount(_discountPercent));
 }
コード例 #7
0
 public ICartState PayForCart(ICartState currentState, decimal amountToPay)
 {
     var visitor = new PayForCartVisitor() { amountToPay = amountToPay };
     return currentState.Accept(visitor);
 }
コード例 #8
0
 public ICartState AddProduct(ICartState currentState, Product product)
 {
     var visitor = new AddProductVisitor() { productToAdd = product };
     return currentState.Accept(visitor);
 }
コード例 #9
0
            public ICartState AddProduct(ICartState currentState, Product product)
            {
                var cartStateEmpty = currentState as CartStateEmpty; //CAST!
                if (cartStateEmpty != null)
                {
                    return cartStateEmpty.AddItem(Product.ProductY);
                }

                var cartStateActive = currentState as CartStateActive; //CAST!
                if (cartStateActive != null)
                {
                    return cartStateActive.AddItem(Product.ProductY);
                }

                // paid state -- do nothing
                return currentState;
            }
コード例 #10
0
ファイル: Cart.cs プロジェクト: mokeev1995/test1
 public Cart(ICartState cartState)
 {
     CurrentState = cartState;
 }
コード例 #11
0
 public void Print(ICartState cart)
 {
     CartState = cart;
 }