C# 是否存在用于访问IEnumerable中的具体类型的设计模式<;IFoo>;?
我正在尝试将创建模式应用于以下业务领域。我不确定这是否是正确的解决方案,但我一直在研究factory和builder模式,但我可能试图应用错误的模式。以下是以下域:C# 是否存在用于访问IEnumerable中的具体类型的设计模式<;IFoo>;?,c#,design-patterns,builder,factory-pattern,C#,Design Patterns,Builder,Factory Pattern,我正在尝试将创建模式应用于以下业务领域。我不确定这是否是正确的解决方案,但我一直在研究factory和builder模式,但我可能试图应用错误的模式。以下是以下域: 技术规格 视觉规格 视野(字符串) 分辨率(字符串) 音频规格 频率范围(字符串) 麦克风(布尔值) 上面我有一个技术规范的业务对象,我只是展示了两个的示例,但它们最多可以是N个对象。这对于技术规范的属性是正确的,每个规范最多可以有N个属性 如果我想返回技术规范的属性,那么尝试使用上面提到的模式以抽象的方式编写代码时
- 技术规格
- 视觉规格
- 视野(字符串)
- 分辨率(字符串)
- 音频规格
- 频率范围(字符串)
- 麦克风(布尔值)
- 视觉规格
class Program
{
static void Main(string[] args)
{
TechnicalSpecificationBuilder visual = new VisualSpecificationBuilder();
TechnicalSpecificationBuilder audio = new AuditorySpecificationBuilder();
//TODO, how do I get acces to properties without Casting?
Specification visualSpec = visual.CreateSpecification();
Specification audiotSpec = audio.CreateSpecification();
}
}
抽象技术规范生成器:
public abstract class TechnicalSpecificationBuilder
{
public Specification CreateSpecification()
{
return BuildSpecification();
}
protected abstract Specification BuildSpecification();
}
public class VisualSpecificationBuilder : TechnicalSpecificationBuilder
{
protected override Specification BuildSpecification()
{
// TODO: Implement this method
return new VisualSpecification();
}
}
可视化技术规范生成器:
public abstract class TechnicalSpecificationBuilder
{
public Specification CreateSpecification()
{
return BuildSpecification();
}
protected abstract Specification BuildSpecification();
}
public class VisualSpecificationBuilder : TechnicalSpecificationBuilder
{
protected override Specification BuildSpecification()
{
// TODO: Implement this method
return new VisualSpecification();
}
}
摘要规范:
public abstract class Specification
{
}
public class VisualSpecification : Specification
{
public string FieldOfView { get; set; }
public bool IsBinocularVisionCapable { get; set; }
public bool IsHeadTrackingCapable { get; set; }
public bool IsEyeTrackingCapable { get; set; }
public string Resolution { get; set; }
}
视觉规格:
public abstract class Specification
{
}
public class VisualSpecification : Specification
{
public string FieldOfView { get; set; }
public bool IsBinocularVisionCapable { get; set; }
public bool IsHeadTrackingCapable { get; set; }
public bool IsEyeTrackingCapable { get; set; }
public string Resolution { get; set; }
}
下面应该做到这一点-为生成器类使用一个通用基类,并使具体规范子类成为一个类型参数
public abstract class TechnicalSpecificationBuilder<TSpecification>
where TSpecification : Specification
{
public TSpecification CreateSpecification()
{
return this.BuildSpecification();
}
protected abstract TSpecification BuildSpecification();
}
public class VisualSpecificationBuilder : TechnicalSpecificationBuilder<VisualSpecification>
{
protected override VisualSpecification BuildSpecification()
{
return new VisualSpecification();
}
}
公共抽象类技术规范生成器
其中t规格:规格
{
公共TSSpecification CreateSpecification()
{
返回此.BuildSpecification();
}
受保护的抽象TSSpecification BuildSpecification();
}
公共类VisualSSpecificationBuilder:TechnicalSpecificationBuilder
{
受保护的重写VisualSSpecification BuildSpecification()
{
返回新的VisualSSpecification();
}
}
我还建议您考虑使用接口
isspecification
,或者与基类一起使用Specification
——如果由于任何原因无法从基类派生具体的规范类,这可能会有所帮助。除非使用dynamic
。你能解释一下如何使用dynamic吗?@user1329436我试着澄清一下你的标题,它是否说明了你的意思?是的,它说明了。谢谢