Well.. just read / execute this.. What more do I need to say?!

By the way.. Sorry for the missing comments :-)

using System;
using System.Globalization;

namespace GreetingsBuilder
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("Max says..");
                Console.WriteLine("\t" + 
GreetingsFactory.Create().GetGreeting()); } catch (NoGreetingAvailableException e) { Console.WriteLine("\t" + e.Message); } } } public class
GreetingsFactory { public static GreetingBase Create() { if (DateTime.Now.Date < DateTime.Parse("28.12.06", CultureInfo.CreateSpecificCulture("de-at"))) { return new ChristmasGreeting(); } else if (DateTime.Now.Date < DateTime.Parse("04.01.07", CultureInfo.CreateSpecificCulture("de-at"))) { return new NewYearsGreeting(); } else { throw new NoGreetingAvailableException(); } } } public abstract class GreetingBase { public abstract string GetGreeting(); } public class ChristmasGreeting : GreetingBase { public override string GetGreeting() { return "\"Merry Christmas !\""; } } public class NewYearsGreeting : GreetingBase { public override string GetGreeting() { return "\"A happy new year!\""; } } public class NoGreetingAvailableException : Exception { public NoGreetingAvailableException() : base( "\"Sorry! You've got to wait until next year!\"") { } } }