static void Main(string[] args)
        {
            var observer            = new Observer();
            var countingDuckFactory = new CountingDuckFactory();

            var mallarDuck = countingDuckFactory.createMallarDuck();
            //mallarDuck.addObserver(observer);

            var rubberDuck = countingDuckFactory.createRubberDuck();
            //rubberDuck.addObserver(observer);

            var redheadDuck = countingDuckFactory.createRedHeadDuck();
            //redheadDuck.addObserver(observer);

            var duckCallDuck = countingDuckFactory.createDuckCallDuck();
            //duckCallDuck.addObserver(observer);

            var fakeDuckIsAGoose = countingDuckFactory.createGooseDucky();
            //fakeDuckIsAGoose.addObserver(observer);

            //mallarDuck.quack();
            //rubberDuck.quack();
            //redheadDuck.quack();
            //duckCallDuck.quack();
            //fakeDuckIsAGoose.quack();

            var flock = new Flock();

            flock.addQuackable(mallarDuck);
            flock.addQuackable(duckCallDuck);
            flock.addQuackable(fakeDuckIsAGoose);
            flock.addQuackable(rubberDuck);
            flock.addQuackable(redheadDuck);
            //flock.addObserver(observer);
            flock.quack();



            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            var observer = new Observer();
            var countingDuckFactory = new CountingDuckFactory();

            var mallarDuck = countingDuckFactory.createMallarDuck();
            //mallarDuck.addObserver(observer);

            var rubberDuck = countingDuckFactory.createRubberDuck();
            //rubberDuck.addObserver(observer);

            var redheadDuck = countingDuckFactory.createRedHeadDuck();
            //redheadDuck.addObserver(observer);

            var duckCallDuck = countingDuckFactory.createDuckCallDuck();
            //duckCallDuck.addObserver(observer);

            var fakeDuckIsAGoose = countingDuckFactory.createGooseDucky();
            //fakeDuckIsAGoose.addObserver(observer);

            //mallarDuck.quack();
            //rubberDuck.quack();
            //redheadDuck.quack();
            //duckCallDuck.quack();
            //fakeDuckIsAGoose.quack();

            var flock = new Flock();
            flock.addQuackable(mallarDuck);
            flock.addQuackable(duckCallDuck);
            flock.addQuackable(fakeDuckIsAGoose);
            flock.addQuackable(rubberDuck);
            flock.addQuackable(redheadDuck);
            //flock.addObserver(observer);
            flock.quack();

            Console.ReadKey();
        }