У меня есть абстрактный класс SaveManager и мои конкретные классы TVSaveManager, DataSaveManager и VoiceSaveManager, реализующие абстрактный класс SaveManager.
List<SaveManager> lstPrdSaveManager;
public SaveResponseModel SaveProducts(SaveProductsRequest objSaveProductsRequest)
{
SaveResponseModel saveResponseModel = new SaveResponseModel();
lstPrdSaveManager = SaveManagerFactory.GetSaveManagers(objSaveProductsRequest, saveResponseModel);
lstPrdSaveManager.ForEach(saveManager =>
{
saveResponseModel = saveManager.MapAndSaveProduct();
});
return saveResponseModel;
}
Фабричный класс решит, какой менеджер создать и отправить нам список. Я пройдусь по списку и вызову общий интерфейс MapAndSaveProduct, которого придерживаются все конкретные классы. Я думаю, больше или как шаблон стратегии.
Но дело в том, что тип возврата метода MapAndSaveProduct конкретного savemanage отличается. TVResponse для TvSaveManager и DataResponse для DataSaveManager и так далее. Поэтому я создал класс SaveResponseModel для объединения всех возвращаемых типов (я передаю SaveResponseModel в factory, чтобы он передавался конструктору всех конкретных классов savemanager. Отдельный класс установит желаемое свойство, например TvSaveManager -> saveResponseModel.TvResponse). Я получаю желаемый результат, и код выглядит чистым.
Вопросы: 1) Правильно ли использовать этот шаблон, когда у нас другой тип? 2) Если конкретный класс имеет разные типы, не следует ли нам использовать шаблон стратегии? 3) Должен ли я в этом случае подходить к другому шаблону проектирования. если да то какой?
SaveManager
это класс, верно? Но тип возвращаемого значения связан с методом. - person Mohayemin   schedule 27.08.2012