SaveManager Abstractクラスと、SaveManager Abstractクラスを実装する具体的なクラスTVSaveManager、DataSaveManager、VoiceSaveManagerがあります。
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」を呼び出します。私はもっと戦略パターンが好きだと思います。
ただし、具体的なsavemanageのMapAndSaveProductメソッドの戻り型はすべて異なります。TvSaveManagerのTVResponseやDataSaveManagerのDataResponseなど。そこで、すべての戻り型をクラブ化するSaveResponseModelクラスを作成しました(SaveResponseModelをファクトリに渡して、すべての具象のsavemanagerクラスのコンストラクターに渡されるようにします。個々のクラスはTvSaveManager-> saveResponseModel.TvResponseのように目的のプロパティを設定します)。希望する結果が得られ、コードはきれいに見えます。
質問は、1)異なるタイプがある場合、このパターンを使用する正しい方法ですか?2)具象クラスの種類が異なる場合、戦略パターンを使用するべきではありませんか?3)この場合、別のデザインパターンにアプローチする必要があります。はいの場合、どれですか?