Esempio n. 1
0
        static void Main()
        {
            var ducks = new List <DuckBase>
            {
                new SimpleDuck(),
                new ExoticDuck(),
                new WoodenDuck(),
                new RubberDuck()
            };

            foreach (var duck in ducks)
            {
                duck.Display();
                duck.Swim();
                duck.Quack();
                duck.Fly();

                Console.WriteLine();
            }

            var upgradableDuck = new UpgradableDuck();

            upgradableDuck.Display();
            upgradableDuck.Swim();

            upgradableDuck.flyBehaviour   = new FlyWithWings();
            upgradableDuck.quackBehaviour = new ExoticQuack();
            upgradableDuck.Quack();
            upgradableDuck.Fly();
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            List <DuckBase> ducks = new List <DuckBase>();

            ducks.Add(new ExoticDuck());
            ducks.Add(new SimpleDuck());
            ducks.Add(new WoodenDuck());
            ducks.Add(new RubberDuck());

            foreach (var duck in ducks)
            {
                duck.Display();
                duck.Swim();
                duck.Quack();
                duck.Fly();

                Console.WriteLine();
            }

            DuckBase upgradableDuck = new UpgradableDuck();

            upgradableDuck.Display();
            upgradableDuck.Swim();
            upgradableDuck.Quack();
            upgradableDuck.Fly();

            upgradableDuck.SetFlyBehaviour(new FlyWithWings());
            upgradableDuck.SetQuackBehaviour(new ExoticQuack());
            upgradableDuck.Quack();
            upgradableDuck.Fly();

            Console.ReadLine();
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            List <DuckBase> ducks = new List <DuckBase> // список универсального типа, в данном случае содержит
            {                                           // объекты класса DuckBase
                new ExoticDuck(),
                new SimpleDuck(),
                new WoodenDuck(),
                new RubberDuck()
            };

            foreach (var duck in ducks) // вызов всех методов каждого объекта
            {
                duck.Display();
                duck.Swim();
                duck.Quack();
                duck.Fly();

                Console.WriteLine();
            }

            DuckBase upgradableDuck = new UpgradableDuck(); // динамический объект, поддерживающий изменения

            upgradableDuck.Display();
            upgradableDuck.Swim();
            upgradableDuck.Quack();
            upgradableDuck.Fly();

            upgradableDuck.SetFlyBehaviour(new FlyWithWings());  // пример переопределения непостоянных методов
            upgradableDuck.SetQuackBehaviour(new ExoticQuack()); // (переприсваивается нужная реализация интерфейса)
            upgradableDuck.Quack();                              // повторный вызов изменённых методов
            upgradableDuck.Fly();

            Console.ReadKey(); // задержка ввода
        }