Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Good iPhone12 = new Good("IPhone 12");
- Good iPhone11 = new Good("IPhone 11");
- Warehouse warehouse = new Warehouse();
- Shop shop = new Shop(warehouse);
- warehouse.Delive(iPhone12, 10);
- warehouse.Delive(iPhone11, 1);
- //Вывод всех товаров на складе с их остатком
- Cart cart = shop.Cart();
- cart.Add(iPhone12, 4);
- cart.Add(iPhone11, 3); //при такой ситуации возникает ошибка так, как нет нужного количества товара на складе
- //Вывод всех товаров в корзине
- Console.WriteLine(cart.Order().Paylink);
- cart.Add(iPhone12, 9); //Ошибка, после заказа со склада убираются заказанные товары
- public class Warehouse : IDeliveryWarehouse
- {
- private readonly Dictionary<Good, int> _goods;
- public Warehouse()
- {
- GoodEqualityCompare goodEqualityCompare = new();
- _goods = new(goodEqualityCompare);
- }
- public void Delive(Good good, int countGoods)
- {
- good = good ?? throw new ArgumentNullException();
- if (countGoods < 0)
- throw new ArgumentOutOfRangeException();
- if (_goods.ContainsKey(good))
- _goods[good] += countGoods;
- else
- _goods.Add(good, countGoods);
- }
- public bool CanIssue(Good good, int countGoods)
- {
- good = good ?? throw new ArgumentNullException();
- if (countGoods < 0)
- throw new ArgumentOutOfRangeException();
- if (_goods.TryGetValue(good, out int count))
- return count >= countGoods;
- else
- return false;
- }
- public void TransferForDelivery(Good good, int countGoods)
- {
- good = good ?? throw new ArgumentNullException();
- if (countGoods < 0)
- throw new ArgumentOutOfRangeException();
- if (_goods.ContainsKey(good) && _goods[good] >= countGoods)
- _goods[good] -= countGoods;
- else
- throw new ArgumentOutOfRangeException();
- }
- }
- public class Shop
- {
- private readonly Warehouse _warehouse;
- public Shop(Warehouse warehouse) => _warehouse = warehouse ?? throw new ArgumentNullException();
- public Cart Cart()
- {
- return new Cart(_warehouse);
- }
- }
- public class Cart
- {
- private readonly Dictionary<Good, int> _goods;
- private readonly IDeliveryWarehouse _warehouse;
- public Cart(IDeliveryWarehouse warehouse)
- {
- _warehouse = warehouse ?? throw new ArgumentNullException();
- GoodEqualityCompare goodEqualityCompare = new();
- _goods = new(goodEqualityCompare);
- }
- public void Add(Good good, int countGoods)
- {
- good = good ?? throw new ArgumentNullException();
- if (countGoods < 0)
- throw new ArgumentOutOfRangeException();
- if (_goods.ContainsKey(good))
- _goods[good] += countGoods;
- else
- _goods.Add(good, countGoods);
- }
- public PayOrder Order()
- {
- foreach(var goods in _goods)
- {
- _warehouse.TransferForDelivery(goods.Key, goods.Value);
- }
- _goods.Clear();
- return new PayOrder();
- }
- }
- public class Good
- {
- public Good(string name)
- {
- if (string.IsNullOrEmpty(name))
- throw new ArgumentNullException();
- Name = name;
- }
- public string Name { get; }
- }
- public class PayOrder
- {
- public PayOrder() { }
- public string Paylink { get; }
- }
- public interface IDeliveryWarehouse
- {
- public bool CanIssue(Good good, int countGoods);
- public void TransferForDelivery(Good good, int countGoods);
- }
- public class GoodEqualityCompare : IEqualityComparer<Good>
- {
- public bool Equals(Good? good1, Good? good2)
- {
- if (ReferenceEquals(good1, good2))
- return true;
- if (good1 == null || good2 == null)
- return false;
- return good1.Name == good2.Name;
- }
- public int GetHashCode(Good good) => good.Name.GetHashCode();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement