public static void DuckStrategyPatternExample()
        {
            List <Duck> duckList = new List <Duck>();

            //Mountain duck with simple Quack Method
            LoudRiverDuck river_duck = new LoudRiverDuck(
                new TerminalDisplay(),
                new SimpleQuack(),
                new SimpleFly());

            //Mountain duck with different Quack Method
            MountainDuck mountainDuck = new MountainDuck(
                new TerminalDisplay(),
                new LoudQuack(),
                new SimpleFly());

            duckList.Add(river_duck);
            duckList.Add(mountainDuck);

            foreach (var duck in duckList)
            {
                duck.Display();
                duck.Quack();
                duck.Fly();
                Console.WriteLine();
            }
        }
Example #2
0
        static void Main(string[] args)
        {
            CityDuck cityDuck = new CityDuck();

            cityDuck.PerformDisplay();
            cityDuck.PerformFly();
            cityDuck.PerformQuack();

            MountainDuck mountaintDuck = new MountainDuck();

            mountaintDuck.PerformDisplay();
            mountaintDuck.PerformFly();
            mountaintDuck.PerformQuack();
        }
Example #3
0
        public static void Main(string[] args)
        {
            // First approach (DI and base class of type duck)
            Console.WriteLine("First approach using base class");

            Console.WriteLine("WildDuck using base class");
            var wildDuck = new WildDuck();

            wildDuck.Fly();
            wildDuck.Quack();
            Console.WriteLine("");

            Console.WriteLine("MountainDuck using base class");
            var mountainDuck = new MountainDuck();

            mountainDuck.Fly();
            mountainDuck.Quack();
            Console.WriteLine("");

            Console.WriteLine("RubberDuck using base class");
            var RubberDuck = new RubberDuck();

            RubberDuck.Fly();
            RubberDuck.Quack();
            Console.WriteLine("");

            //
            // Better approach
            Console.WriteLine("Better approach using interfaces");
            //

            // Create fly behaviours
            IFlyable flyingNormal = new FlyingNormal();
            IFlyable flyingHigh   = new FlyingHigh();
            IFlyable wontFly      = new WontFly();

            // Create quack behaviours
            IQuackable quackingLoud = new QuackingLoud();
            IQuackable squeek       = new Squeak();

            // Create wildDuck (flying normal, quacking loud)
            Console.WriteLine("WildDuck-Interface (flying normal, quacking loud");
            var betterWildDuck = new BetterDuckClass(flyingNormal, quackingLoud);

            betterWildDuck.Fly();
            betterWildDuck.Quack();
            Console.WriteLine("");

            // Create mountainDuck (flying high, quacking loud)
            Console.WriteLine("MountainDuck-Interface (flying high, quacking loud");
            var betterMountainDuck = new BetterDuckClass(flyingHigh, quackingLoud);

            betterMountainDuck.Fly();
            betterMountainDuck.Quack();
            Console.WriteLine("");

            // Create rubberDuck (won't fly, squeeks)
            Console.WriteLine("RubberDuck-Interface (won't fly, squeeks");
            var betterRubberDuck = new BetterDuckClass(null, squeek);

            betterRubberDuck.Quack();
            Console.WriteLine("");
        }