2012-08-27 21 views
3

我有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」。我想更多或者像一個戰略模式。

但是,所有具體的savemanage的MapAndSaveProduct方法的返回類型是不同的。用於TvSaveManager的TVResponse和用於DataSaveManager的DataResponse等。所以我創建了SaveResponseModel類來保存所有的返回類型(我將SaveResponseModel傳遞給工廠,這樣它就會傳遞給所有具體的savemanager類的構造函數,單獨的類將設置所需的屬性,如TvSaveManager - > saveResponseModel.TvResponse)。我得到期望的結果,代碼看起來很乾淨。

問題是, 1)當我們有不同類型時,使用這種模式是否正確? 2)如果具體類別有不同類型,我們不應該使用策略模式嗎? 3)在這種情況下,我應該採用不同的設計模式嗎?如果是的,哪一個?

+0

你想達到什麼目的?你正在試圖用你的設計解決什麼問題? –

+0

我沒有得到*「具體savemanage的返回類型是不同的」*。 'SaveManager'是一個類的權利?但是返回類型與Method關聯。 – Mohayemin

+0

是mohayemin。其MapAndSaveProduct返回類型不同 –

回答

2

您在一組方法中使用了StrategyVisitor的組合;這絕對沒問題。你可以通過給出響應一個通用接口來分開它們,並添加一個訪問者來收集正確的響應。這將按順序應用兩種模式,而不是同時應用兩種模式。

interface IResponseVisitor { 
    void VisitTvResponse(TvResponse r); 
    void VisitDataResponse(DataResponse r); 
} 
interface IResponse { 
    void Accept(IResponseVisitor v); 
} 
class TvResponse : IResponse { 
    public void Accept(IResponseVisitor v) { 
     v.VisitTvResponse(this); 
    } 
} 
class DataResponse : IResponse { 
    public void Accept(IResponseVisitor v) { 
     v.VisitDataResponse(this); 
    } 
} 

現在所有的MapAndSaveProduct實現可以返回常見IResponse。你可以把它們全部收集起來,然後通過執行IResponseVisitor來完成它們,並且在相應的Accept方法中爲每種類型做你所需要的。