static void Main(string[] args) { Console.WriteLine("Please select the Shipping method 1.FexEd 2.DHL 3.In House Shipping"); string input = Console.ReadLine(); int choice = 0; bool result = int.TryParse(input, out choice); if (result == true) { OrderProcessor orderProcessor = new OrderProcessor(); //这里体现null object pattern //IShippingStrategy shippingStrategy = new InvalidShippingStrategy();//一般的写法 IShippingStrategy shippingStrategy = InvalidShippingStrategy.Instance; switch (choice) { case 1: shippingStrategy = new FedExShippingStrategy(); break; case 2: shippingStrategy = new DHLShippingStrategh(); break; case 3: shippingStrategy = new InHouseShippingStrategy(); break; } orderProcessor.ProcessOrder(shippingStrategy); } }
//这里体现null object pattern //public void ProcessOrder(IShippingStrategy shippingStrategy=null) //没用null object pattern之前的写法 public void ProcessOrder(IShippingStrategy shippingStrategy) { #region 没用null object pattern之前的写法 //if (shippingStrategy != null) //{ // shippingStrategy.ScheduleShipping(); //} //else //{ // Console.WriteLine("Invalid Shipping Strategy"); //} #endregion shippingStrategy.ScheduleShipping(); }
public StrategySelector(CountryShippingModel model) { switch (model.Country) { case Country.Netherlands: shippingStrategy = new NetherlandsShippingStrategy(); break; case Country.Belgium: shippingStrategy = new BelgiumShippingStrategy(); break; case Country.Other: shippingStrategy = new OtherCountryShippingStrategy(); break; } ShippingStrategy = shippingStrategy; }
public StrategyContext(IShippingStrategy shippingStrategy) { _shippingStrategy = shippingStrategy; }
public OnlineOrder(List<Product> orderItems, IShippingStrategy shippingMethod, IPrintMedium printMethod) : base(orderItems, shippingMethod, printMethod) { }
public CostCalculationService_WithStrategy(IShippingStrategy shippingStrategy) { _shippingStrategy = shippingStrategy; }
/// <summary> /// No default Constructor ensures that a Strategy object is always provided when constructing a ProductShipper /// </summary> /// <param name="shippingStrategy"></param> public ProductShipper(IShippingStrategy shippingStrategy) { _shippingStrategy = shippingStrategy; }
public ShippingService(IShippingStrategy strategy) { this.strategy = strategy; }
public CostCalculationService(IShippingStrategy shippingStrategy) { this.shippingStrategy = shippingStrategy; }
public Order(IShippingStrategy shippingStrategy) { _shippingStrategy = shippingStrategy; }
public ShippingCostCalculatorService(IShippingStrategy shippingStrategy) { _shippingStrategy = shippingStrategy; }
public ShippingCalculation_WithStrategy(IShippingStrategy shippingStrategy) { this.shippingStrategy = shippingStrategy; }
public ShopingCostCalculator(IShippingStrategy strategy) { ShippingStrategy = strategy; }
public StrategyCostCalculation(IShippingStrategy strategyShipping) { _strategyShipping = strategyShipping ?? throw new ArgumentNullException(nameof(strategyShipping)); }
public double CalculateShipping(IShippingStrategy shippingStrategy, Order order) { return(shippingStrategy.CalculateShippingCost(order)); }
public double Calculate(Order order, IShippingStrategy shippingStrategy) { return(shippingStrategy.Calculate(order)); }
//In theory Chekout class should take an instance of IShippingStrategy instead of Order //And our CalculateShipping method should take Order as a parameter //This is all that is left after strategy. No more if else block public decimal CalculateShipping(IShippingStrategy shippingMethod) { return(shippingMethod.CalculateShipping(order)); }
public ShipSalesOrderService(IShippingStrategy shippingStrategy) { _shippingStrategy = shippingStrategy; }