gpt4 book ai didi

c# - 与策略模式相关的设计问题

转载 作者:太空宇宙 更新时间:2023-11-03 21:05:59 26 4
gpt4 key购买 nike

我正在尝试实现一种策略模式,但不确定如何将策略界面设置为通用。

请看下面我的示例代码:

 public interface ISerializer
{
XDocument Serialize(PharmacyProductDto presetDataDto);
XDocument Serialize(PatientDto presetDataDto);
PrescriberDto Deserialize(PrescriberDto xDocument);
}

public class XmlSerializer : ISerializer
{
public XDocument Serialize(PharmacyProductDto presetDataDto)
{
return new XDocument();
}

public XDocument Serialize(PatientDto presetDataDto)
{
return new XDocument();
}

public PrescriberDto Deserialize(PrescriberDto xDocument)
{
return new PrescriberDto();
}
}

public class PatientDto
{
}

public class PrescriberDto
{
}

public class PharmacyProductDto
{
}

在这里您可以看到基本上序列化不同 DTO 的 ISerializer。XmlSerializer 类在序列化许多类型时变得非常笨拙。此外,我将在未来添加更多类型。

我想到这里实现一个策略模式。像这样:

public interface ISerializerStrategy
{
XDocument Serialize(PatientDto presetDataDto);
PatientDto Deserialize(XDocument xDocument);
}

public class PatientDtoSerializerStrategy : ISerializerStrategy
{

}

public class PrescriberDtoSerializerStrategy : ISerializerStrategy
{

}

但是你可以看到 ISerializerStrategyPatientDto 来说是非常具体的。我怎样才能使这个接口(interface)抽象或通用,它也适用于PrescriberDtoSerializerStrategy?

有人可以给我建议吗?

最佳答案

使用通用接口(interface):

public interface ISerializerStrategy<T>
{
XDocument Serialize(T presetDataDto);
T Deserialize(XDocument xDocument);
}

public class PatientDtoSerializerStrategy : ISerializerStrategy<PatientDto>
{
XDocument Serialize(PatientDto presetDataDto);
PatientDto Deserialize(XDocument xDocument);
}

public class PrescriberDtoSerializerStrategy : ISerializerStrategy<PrescriberDto>
{
XDocument Serialize(PrescriberDto presetDataDto);
PrescriberDto Deserialize(XDocument xDocument);
}

用法

public class Foo
{
public Foo(ISerializerStrategy<PrescriberDto> serializer)
{
// ...
}
}

注册

container.RegisterType<ISerializerStrategy<PrescriberDto>, PrescriberDtoSerializerStrategy>(); 

关于c# - 与策略模式相关的设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41125565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com