Accepting a Dependency Injection (IValidationStrategy) and using a nested builder class to construct the different stratgy implementations in an immutable way:
class Program { static void Main(string[] args) { Console.Out.WriteLine( "IsValid: {0}", new StringValidator.Builder() .Regex(@"\d+") .Validate("55") ); Console.Out.WriteLine( "IsValid: {0}", new StringValidator.Builder() .WildCard("*") .Validate("Whatever string to be validated") ); // Or, if you hate using nameless temporary objects Console.Out.WriteLine(); StringValidator.Builder stringValidatorBuilder = new StringValidator.Builder(); string regex = @"\d+"; StringValidator regValidator = stringValidatorBuilder.Regex(regex); bool isValid = regValidator.Validate("55"); Console.Out.WriteLine("IsValid: {0}", isValid); string wildCard = "*"; StringValidator wildCardValidator = stringValidatorBuilder.WildCard(wildCard); isValid = wildCardValidator.Validate("Whatever string to be validated"); Console.Out.WriteLine("IsValid: {0}", isValid); } }
IsValid: True IsValid: True IsValid: True IsValid: True