using System.Collections.Generic;
using System.Text.RegularExpressions;
private static readonly ICatService _catService;
public static void Main()
Console.WriteLine("Received a new cat in the mail.");
var newCat = new Cat() { Id = 1313, Name = "Simplicius Simplicissimus", DNA = "15132AFDAVKJASDFJ12515522222WOMP124124938MEOW12413S" };
public static void NewCatReceived(Cat newCat)
CatTesterBase catTester = null;
var genus = RetrieveCatGenusType(newCat);
catTester = new SmallCatTester(newCat, GenusType.Small);
catTester = new LargeCatTester(newCat, GenusType.Large);
throw new Exception("No valid cat tester could be instantiated.");
private static string RetrieveCatGenusType(Cat newCat)
public class SmallCatTester : CatTesterBase
public SmallCatTester(Cat cat, GenusType genusType) : base(cat, genusType)
public override void Process()
var deliveryResults = _catService.SendTestResultsToLab(_cat, _genusType);
_catService.NotifySender(deliveryResults);
public override void ProcessCatMatch()
throw new NotImplementedException();
public override void LogAndDiscard()
throw new NotImplementedException();
public class LargeCatTester : CatTesterBase
public LargeCatTester(Cat cat, GenusType genusType) : base(cat, genusType)
public override void Process()
var deliveryResults = _catService.SendTestResultsToLab(_cat, _genusType);
_catService.NotifySender(deliveryResults);
public override void ProcessCatMatch()
throw new NotImplementedException();
public override void LogAndDiscard()
throw new NotImplementedException();
public abstract class CatTesterBase
public GenusType _genusType;
public CatMatch PotentialCatMatch
public CatTesterBase(Cat cat, GenusType genusType)
DetermineCatSpeciesMatch();
private void DetermineCatSpeciesMatch()
var speciesTests = SearchCatSpeciesTests(genusTypeId: (int)_genusType);
foreach (var st in speciesTests)
if (st.Test.IsMatch(_cat.DNA))
PotentialCatMatch = new CatMatch()
if (PotentialCatMatch == null)
throw new System.Exception("Cat DNA match could not be determined.");
private List<CatSpecieTest> SearchCatSpeciesTests(int? id = null, int? genusTypeId = null)
var result = new List<CatSpecieTest>()
Id = 122, Name = "BigFelineTest", Genus = GenusType.Large, Test = new Regex(@"^(BIG-CAT)((?<=\s)(.*?)(?=\s))(\swith\s)((?<=\s)(.*?)(?=HUGECLAWS))")
Id = 241, Name = "KittayTest", Genus = GenusType.Small, Test = new Regex(@"^(LIL-CAT)((?<=\s)(.*?)(?=\s))(\swith\s)((?<=\s)(.*?)(?=TINYPAWS))")
public abstract void Process();
public abstract void ProcessCatMatch();
public abstract void LogAndDiscard();
public class CatSpecieTest
public class DeliveredResults
public interface ICatService
DeliveredResults SendTestResultsToLab(Cat cat, GenusType genus);
void NotifySender(DeliveredResults deliveredResults);