我有SaveManager Abstract类和我的具体类TVSaveManager,DataSaveManager和VoiceSaveManager实现SaveManager Abstract类。
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 - &gt; saveResponseModel.TvResponse)。我得到了理想的结果,代码看起来很干净。问题是, 1)当我们有不同的类型时,这是使用这种模式的正确方法吗? 2)如果具体类有不同的类型,我们不应该使用策略模式吗? 3)在这种情况下,我应该采用不同的设计模式吗?如果是哪一个?
答案 0 :(得分:3)
您在一组方法中有Strategy和Visitor的组合;这绝对没问题。您可以通过为响应提供一个通用界面,并为其添加访问者以获取正确的响应来将它们分开。这将按顺序应用两种模式,而不是同时应用两种模式。
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
方法中为每种类型执行所需的操作。