Monday, September 19, 2011

Appliance of Strategy Design Pattern

Here is a small example of how I used the Strategy Design Pattern to re-use specific methods
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

// Appliance of the Strategy Pattern

namespace ConsoleApplication5
{
        class Program
        {
            static void Main(string[] args)
            {
                Dude Earl = new Dude("Albert");
                Dude Gary = new Dude("Gary");
            
                Earl.SetMorningRitual(new CigaretteSmoker());
                Gary.SetMorningRitual(new CoffeeDrinker());

                Earl.WakeUp();
                Gary.WakeUp();
            
                // During the day Earl decides to give up smoking and start drinking coffee in the morning instead.

                Earl.SetMorningRitual(new CoffeeDrinker());
                Earl.WakeUp();
                Console.ReadKey();

            }
        }

        class Dude
        {
            IMorningRitual _behaviour;
            String _name;

            public Dude(String MyName)
            {
                _name = MyName;
            }

            public void SetMorningRitual(IMorningRitual Behaviour)
            {
                _behaviour = Behaviour;
            }

            public void WakeUp()
            {
                Console.WriteLine(this._name + " just woke up");
                _behaviour.DoMorningRitual();
            }
        }

        public interface IMorningRitual
        {
            void DoMorningRitual();
        }

        public class CigaretteSmoker : IMorningRitual
        {
            public void DoMorningRitual()
            {
                Console.WriteLine("Still sleepy but gonna smoke one anyway.. *lights cigarette\n");
            }
        }

        public class CoffeeDrinker : IMorningRitual
        {
            public void DoMorningRitual()
            {
                Console.WriteLine("A morning without coffee is like something without something. Aahhh delicious!\n");
            }
        }

}