void Simulate()
        {
            IQuackable mallardDuck  = new MallardDuck();
            IQuackable readHeadDuck = new ReadHeadDuck();
            IQuackable duckCall     = new DuckCall();
            IQuackable rubberDuck   = new RubberDuck();

            //Теперь гуси тоже смогут участвовать в нашей имитации.
            Goose goose = new Goose();
            // Goose замаскировывается под Duck
            IQuackable gooseDuck = new GooseAdapter(goose); // Goose упаковывается в GooseAdapter

            Console.WriteLine("Duck Simulator : With GooseAdapter");

            Simulate(mallardDuck);
            Simulate(readHeadDuck);
            Simulate(duckCall);
            Simulate(rubberDuck);
            Simulate(gooseDuck);      // С адаптироваанным объектом Goose можно работать, как с обычным объектом Duck, реализующем IQuackable
        }
        static void Main(string[] args)
        {
            MallardDuck duck = new MallardDuck();

            WildTurkey turkey = new WildTurkey();

            IDuck turkeyAdapter = new TurkeyAdapter(turkey);

            Console.WriteLine("The Turkey says...");

            turkey.Gobble();
            turkey.Fly();

            Console.WriteLine("The Duck says...");
            TestDuck(duck);

            Console.WriteLine("TurkeyAdapter says...");
            TestDuck(turkeyAdapter);

            Console.ReadKey();
        }