public ShippingProvider CreateShippingProvider(Order order) { ShippingProviderFactory shippingProviderFactory; if (order.Sender.Country != order.Recipient.Country) { shippingProviderFactory = new GlobalExpressShippingProviderFactory(); } else { shippingProviderFactory = new StandardShippingProviderFactory(); } return(shippingProviderFactory.CreateShippingProvider(order.Sender.Country)); }
// 1. separate client from creation of object // 2. ALLOW MORE FLEXIBLE AND EXTENSIBLE // 3. application only care about instance of ShippingProviderFactory and not care about EXACTLY WHICH shipping Provider it uses // DIFF : // simple factory has all decision inside its method only, whereas in this pattern // CREATOR CAN OVERRIDE default factory method implementations static void Main(string[] args) { var aus = "Australia"; var swe = "Sweden"; #region Create Order var recipientCountry = aus; var senderCountry = aus; var totalWeight = 10; var order = new Order { Recipient = new Address { To = "Filip Ekberg", Country = recipientCountry }, Sender = new Address { To = "Someone else", Country = senderCountry }, TotalWeight = totalWeight }; order.LineItems.Add(new Item("CSHARP_SMORGASBORD", "C# Smorgasbord", 100m), 1); order.LineItems.Add(new Item("CONSULTING", "Building a website", 100m), 1); #endregion order.ShippingStatus = ShippingStatus.ReadyForShipment; //var cart = new ShoppingCart(order, new StandardShippingProviderFactory()); //var shippingLabel = cart.Finalize(); IShippingProviderFactory factory = null; // OUT OF STATE TRANSPORT if (order.Recipient != order.Sender) { factory = new GlobalExpressShippingProviderFactory(); } else { factory = new StandardShippingProviderFactory(); } var obj = factory.CreateShippingProvider(order.Sender.Country); var shippingLabel = obj.GenerateShippingLabelFor(order); Console.WriteLine(shippingLabel); Console.ReadLine(); }
public ShippingProvider CreateShippingProvider(Order order) { // Example of including business logic in the factory class // Using pre-existing factories inside the Abstract Factory pattern ShippingProviderFactory shippingProviderFactory; if (order.Sender.Country != order.Recipient.Country) { shippingProviderFactory = new GlobalExpressShippingProviderFactory(); } else { shippingProviderFactory = new StandardShippingProviderFactory(); } return(shippingProviderFactory.CreateShippingProvider(order.Sender.Country)); }
public ShippingProvider CreateShippingProvider(Order order) { var shippingProvider = new GlobalExpressShippingProviderFactory(); return(shippingProvider.CreateShippingProvider(order.Sender.Country)); }