I am putting together an explanation and code example of this design pattern, attempting to help others around me grasp it (along with helping myself to master the pattern as we
I would suggest you use interfaces instead of abstract classes/inheritance. Other than that, it looks OK.