Esempio n. 1
0
        static void Main(string[] args)
        {
            // Abstract Factory
            AbstractDuckFactory duckFactory = new CountingDuckQuackFactory();

            // Abstract factory to create Strategy pattern wrapped in Decorator pattern
            IQuackable mallardDuck = duckFactory.CreateMallardDuck();
            IQuackable redheadDuck = duckFactory.CreateRedheadDuck();
            IQuackable rubberDuck  = duckFactory.CreateRubberDuck();

            // Adapter pattern
            IQuackable goose = new GooseAdapter(new Goose());

            // Composite pattern
            Flock flockOfDucks = new Flock();

            flockOfDucks.Add(mallardDuck);
            flockOfDucks.Add(redheadDuck);
            flockOfDucks.Add(rubberDuck);

            Flock flockOfMallards = new Flock();

            flockOfMallards.Add(duckFactory.CreateMallardDuck());
            flockOfMallards.Add(duckFactory.CreateMallardDuck());
            flockOfMallards.Add(duckFactory.CreateMallardDuck());
            flockOfMallards.Add(duckFactory.CreateMallardDuck());
            flockOfMallards.Add(duckFactory.CreateMallardDuck());

            duckCall(mallardDuck);
            duckCall(redheadDuck);
            duckCall(rubberDuck);
            duckCall(goose);

            // Flock of Mallards
            Console.WriteLine("\nA flock of Mallards quacking ...");
            flockOfMallards.Quack();

            // Flock of mixed ducks
            Console.WriteLine("\nA flock of mixed ducks quacking ...");
            flockOfDucks.Quack();

            // Altogether now
            Console.WriteLine("\nEntire flock quacking ...");
            flockOfDucks.Add(flockOfMallards);
            flockOfDucks.Quack();

            Console.WriteLine($"Number of duck quacks = {QuackCounter.GetQuackCount()}");
            Console.ReadKey();
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            // Abstract Factory
            AbstractDuckFactory duckFactory = new CountingDuckQuackFactory();

            // Abstract factory to create Strategy pattern wrapped in Decorator pattern
            IQuackable mallardDuck = duckFactory.CreateMallardDuck();
            IQuackable redheadDuck = duckFactory.CreateRedheadDuck();
            IQuackable rubberDuck  = duckFactory.CreateRubberDuck();

            // Adapter pattern
            IQuackable goose = new GooseAdapter(new Goose());

            duckCall(mallardDuck);
            duckCall(redheadDuck);
            duckCall(rubberDuck);
            duckCall(goose);

            Console.WriteLine($"Number of duck quacks = {QuackCounter.GetQuackCount()}");
            Console.ReadKey();
        }