using System; using System.Collections.Generic; using System.Linq; using BoundaryLab.Domain; using BoundaryLab.Application; namespace BoundaryLab.Infrastructure; public static class ShippingFactory { public static IShippingPolicy Create(string code) => code switch { "flat" => new FlatShipping(), "unit" => new UnitShipping(), _ => throw new ArgumentException("Unknown policy", nameof(code)) }; } public sealed class FlatShipping : IShippingPolicy { public int Fee(int units) => 3; } public sealed class UnitShipping : IShippingPolicy { public int Fee(int units) => checked(units * 2); }