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));
        }
Exemplo n.º 2
0
        // 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));
        }
Exemplo n.º 4
0
        public ShippingProvider CreateShippingProvider(Order order)
        {
            var shippingProvider = new GlobalExpressShippingProviderFactory();

            return(shippingProvider.CreateShippingProvider(order.Sender.Country));
        }