title: Is this strategy pattern?
body: <p>A little background:</p>
  
  <p>In the system I am developing, there are various types of CSV files to be read and saved the contents in different database tables. Since this is about changing behavior based on inputs, I studies the decorator, and strategy patterns and came up with the following solution for my system.</p>
  
  <p>First I created following interfaces. </p>
  
  <ul>
  <li><p><code>ICDRMapper</code> reads each line from a given CSV file and maps to a object after running validations/modifications (if any). There are many concrete implementations for each CDR type.</p></li>
  <li><p><code>ICDRReader</code> takes the input CSV file and reads each line and pass it to the mapper. Each reader implementation is decorated with MEF metadata so that the <code>ICDREngine</code> can locate the correct one on the fly. This interface also has many implementations for each CDR Type. </p></li>
  <li><p><code>ICDREngine</code> implementation uses MEF metadata to locate a matching <code>ICDRReader</code> implementation. This usually has only one implementation.</p></li>
  </ul>
  
  <p>Then, I have created a <code>AbstractCDRReader</code> and <code>AbstractCDRMapper</code> and used decorator pattern to delegate specific implementations to different concrete classes.</p>
  
  <p><code>AbstractCDRReader</code> selects the correct <code>ICDRMapper</code> implementation based on MEF metadata just like the engine does.</p>
  
  <p>Following is a generated class diagram.</p>
  
  <p><img src="https://i.stack.imgur.com/ELMTg.png" alt="generated class diagram"></p>
  
  <p>So my questions are, </p>
  
  <ul>
  <li><p><strong>Is this strategy pattern or a different one?</strong></p></li>
  <li><p><strong>Is there any way I could improve this design so that next time I need to read a whole new different CSV file, I can do the implementation very quickly?</strong></p></li>
  </ul>