title: Achieve strategy pattern when we have different return type
body: <p>I have SaveManager Abstract class and my concrete classes TVSaveManager, DataSaveManager and VoiceSaveManager implementing SaveManager Abstract class.</p>
  
  <pre><code>List&lt;SaveManager&gt; lstPrdSaveManager;
  
          public SaveResponseModel SaveProducts(SaveProductsRequest objSaveProductsRequest)
          {
              SaveResponseModel saveResponseModel = new SaveResponseModel();
  
              lstPrdSaveManager = SaveManagerFactory.GetSaveManagers(objSaveProductsRequest, saveResponseModel);
  
              lstPrdSaveManager.ForEach(saveManager =&gt;
                  {
                      saveResponseModel = saveManager.MapAndSaveProduct();
                  });
  
  
              return saveResponseModel;
          }
  </code></pre>
  
  <p>Factory class will decide which manager to create and send us the list. I will loop thru the list and invoke the common interface 'MapAndSaveProduct' that every concrete classes will adhere. I guess more or like a strategy pattern.</p>
  
  <p>But the thing is all the concrete savemanage's MapAndSaveProduct method return type is different. TVResponse for TvSaveManager and DataResponse for DataSaveManager and so on. So i created SaveResponseModel class to club all the return types (I am passing SaveResponseModel to factory so that it will get passed to all concrete savemanager class's constructor. Individual class will set the desired property., like TvSaveManager -> saveResponseModel.TvResponse). I get desired result and code looks clean.</p>
  
  <p>Questions are,
  1) Is it the correct way to use this pattern when we have different type?
  2) If concrete class have different types, should not we use strategy pattern?
  3) Should I approach to different design pattern in this case. if yes which one?</p>