static void Main(string[] args)
        {
            OrderProcessor orderProcessor = new OrderProcessor();

            ShippingAgent shippingClient = new ShippingAgent("Shipping");

            shippingClient.Link = "Link to Shipping Service";
            RoyaltyDepartmentClient royaltyClient = new RoyaltyDepartmentClient("Royalty Department");

            royaltyClient.Link = "Link to Royalty Department Service";

            ProductFactory productFactory = new PhysicalProductFactory();
            Product        book           = productFactory.Create("Fiction Novel");

            book.Outputs = new List <Output>();
            book.Outputs.Add(new PackingSlip("Original Packing Slip", book, shippingClient));
            book.Outputs.Add(new PackingSlip("Duplicate Packing Slip", book, royaltyClient));

            orderProcessor.ProcessOrder(book);
        }
        public override Product Create(string description)
        {
            Target shippingClient = new ShippingAgent("Shipping");

            shippingClient.Link = "URL to Shipping Service";
            Target royaltyClient = new RoyaltyDepartmentClient("Royalty Department");

            royaltyClient.Link = "URL to Royalty Department Service";
            Target paymentClient = new PaymentServiceAgent("Payment");

            paymentClient.Link = "URL to Payment Services";

            Product book = new Book(description);

            book.Outputs = new List <Output>();
            book.Outputs.Add(new PackingSlip("Original Packing Slip", book, shippingClient));
            book.Outputs.Add(new PackingSlip("Duplicate Packing Slip", book, royaltyClient));
            book.Outputs.Add(new PackingSlip("Commission Payment", book, paymentClient));

            return(book);
        }