예제 #1
0
        static void Main(string[] args)
        {
            var option       = Option.Instance.ChosenOption;
            var mealFactory  = option.GetMealFactory();
            var drinkFactory = option.GetDrinkFactory();
            var menuFactory  = option.GetMenuFactory();


            var meal  = new List <Meal>();
            var drink = new List <Drink>();
            var menu  = new List <IMenu>();

            meal.Add(mealFactory.CreateMeal("1", NewMeal.HappyMeal));
            meal.Add(mealFactory.CreateMeal("2", NewMeal.MenuClassic));
            meal.Add(mealFactory.CreateMeal("3", NewMeal.MenuPremium));


            drink.Add(drinkFactory.CreateDrink("1", Type.Cold));
            drink.Add(drinkFactory.CreateDrink("2", Type.Hot));

            var menu1 = menuFactory.CreateMenu(Name.Menu1, meal[0], drink[0]);
            var menu2 = menuFactory.CreateMenu(Name.Menu2, meal[1], drink[1]);
            var menu3 = menuFactory.CreateMenu(Name.Menu3, meal[2], drink[0]);

            menu.Add(menu1.Clone());
            menu.Add(menu2.Clone());
            menu.Add(menu3.Clone());


            Console.WriteLine("=======MEALS======\n");
            foreach (var x in meal)
            {
                Console.WriteLine(x.ToString());
            }
            ;
            Console.WriteLine("======DRINKS======\n");
            foreach (var x in drink)
            {
                Console.WriteLine(x.ToString());
            }
            ;
            Console.WriteLine("======MENUS======\n");
            foreach (var x in menu)
            {
                Console.WriteLine("------------------------");
                Console.WriteLine(x.ToString());
            }
            ;

            Console.WriteLine("\nStructural Patterns:");
            var client1   = new ClientKid("Boy");
            var client2   = new ClientKid("Girl");
            var clientkid = new List <ClientKid>();

            clientkid.Add(client1);
            clientkid.Add(client2);
            foreach (ClientKid k in clientkid)
            {
                new FarcadeToy(k).PointofSale(rand.NextDouble() >= 0.5, rand.NextDouble() >= 0.5);
            }

            menu[0].MenuCl(new Client(new AdultwKid(new ClientKid("Boy"))));
            menu[0].MenuCl(new Client(new AdultwKid(new ClientKid("Girl"))));
            menu[1].MenuCl(new Client(new AdultClient()));
            menu[2].MenuCl(new Client(new AdultClientDecor()));

            Console.WriteLine("-----------------Check if MEAL available in the kitchen-----------------");
            foreach (Meal m in meal)
            {
                Console.Write(m.ToString());
                Console.WriteLine("...............................is ...");
                new FarcadeOrder(m).PointOfSale(rand.NextDouble() >= 0.5);
            }

            Console.WriteLine("\nBehavioral Patterns:");

            Console.WriteLine("-----------------Chain of Responsabilities Pattern-----------------");
            CommandType comm = new CommandType();

            comm.Command = new PerPhone();
            comm.CommandResult();

            comm.Command = new Local();
            comm.CommandResult();

            comm.Command = new Car();
            comm.CommandResult();

            Console.WriteLine("-----------------Strategy Pattern-----------------");
            CommandApprover b = new Manager();
            CommandApprover a = new Worker();

            a.SetNextApprover(b);
            a.ApproveCommand(new Command(false));
            a.ApproveCommand(new Command(true));

            Console.WriteLine("-----------------Iterator Pattern-----------------");
            IAggregate <IMenu> aggregate = new ConcereteAggregate <IMenu>();

            aggregate.AddItem(menu[0]);
            aggregate.AddItem(menu[1]);
            aggregate.AddItem(menu[2]);

            foreach (IMenu par in aggregate.GetAll())
            {
                Console.WriteLine(par);
            }

            Console.WriteLine("-----------------Observer Pattern-----------------");
            ISubject <IMenu> subject = new ConcreteSubject <IMenu>();

            Behavioral.IObserver <IMenu> ob1 = new ConcreteObserver <IMenu>(menu[0]);
            Behavioral.IObserver <IMenu> ob2 = new ConcreteObserver <IMenu>(menu[1]);
            subject.Attach(ob1);
            subject.Attach(ob2);
            subject.SetState(menu1);


            Console.WriteLine("-----------------Command Pattern-----------------");
            Invoker  i     = new Invoker();
            ICommand comm1 = new UndoCommand(menu[0]);

            i.AddCommand(comm1);
            ICommand comm2 = new UndoCommand(menu[1]);

            i.AddCommand(comm2);
            i.Run();

            Console.ReadKey();
        }