public ConversionStrategy CreateConversionStrategy(HundredGroup hundredGroup)
 {
     if (HasHundredsAndTensOrUnits(hundredGroup))
         return new HundredsTensAndUnitsConversionStrategy(numberDescriber);
     if (HasHundreds(hundredGroup))
         return new HundredsConversionStrategy(numberDescriber);
     return new TensAndUnitsConversionStrategy(numberDescriber);
 }
        public override string Convert(HundredGroup hundredGroup)
        {
            var lookupResult = NumberDescriber.LookupNumber(hundredGroup.Number);
            if (lookupResult.Found) return lookupResult.Description;

            var tens = NumberDescriber.LookupNumber(hundredGroup.Tens);
            var units = NumberDescriber.LookupNumber(hundredGroup.Units);
            return Format(tens, units);
        }
 private ConversionStrategy GetConversionStrategy(HundredGroup hundredGroup)
 {
     var factory = new ConversionStrategyFactory(NumberDescriber);
     return factory.CreateConversionStrategy(hundredGroup);
 }
 private string ConvertTensAndUnits(HundredGroup hundredGroup)
 {
     var tensAndUnits = new HundredGroup(hundredGroup.Tens + hundredGroup.Units);
     return GetConversionStrategy(tensAndUnits).Convert(tensAndUnits);
 }
 private string ConvertHundreds(HundredGroup hundredGroup)
 {
     var hundreds = new HundredGroup(hundredGroup.Hundreds);
     return GetConversionStrategy(hundreds).Convert(hundreds);
 }
 public override string Convert(HundredGroup hundredGroup)
 {
     var hundreds = ConvertHundreds(hundredGroup);
     var tensAndUnits = ConvertTensAndUnits(hundredGroup);
     return Format(hundreds, NumberDescriber.Conjunction, tensAndUnits);
 }
 public abstract string Convert(HundredGroup hundredGroup);
 private static bool HasTensOrUnits(HundredGroup hundredGroup)
 {
     return (hundredGroup.Tens + hundredGroup.Units) > 0;
 }
 private static bool HasHundredsAndTensOrUnits(HundredGroup hundredGroup)
 {
     return HasHundreds(hundredGroup) && HasTensOrUnits(hundredGroup);
 }
 private static bool HasHundreds(HundredGroup hundredGroup)
 {
     return hundredGroup.Hundreds > 0;
 }
 public override string Convert(HundredGroup hundredGroup)
 {
     var numberOfHundreds = NumberDescriber.LookupNumber(hundredGroup.NumberOfHundreds);
     var hundred = NumberDescriber.LookupPositionalName(100);
     return Format(numberOfHundreds, hundred);
 }