gpt4 book ai didi

c# - 什么设计模式可以用来构建这个?

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

<分区>

我有一个我无法单独解决的架构问题。

  • 我有一系列实现相同接口(interface)的对象 (IThing)。
  • 我想对“IThing”集合中的每个对象应用转换。
  • 转换取决于接口(interface)的实现。
  • 接口(interface)实现的转换被封装在一个类中。 (策略模式)

我的问题是,在某个地方,我总是以类型转换或一组 if-is-cast 结束,对我来说,这破坏了我的代码的可扩展性。

例子如下:

    public interface IThing
{
string CommonProperty { get; }
}

public class FirstThing : IThing
{
public string CommonProperty { get; }
public string FirstParticularProperty { get; }
}

public class SecondThing : IThing
{
public string CommonProperty { get; }
public string SecondParticularProperty { get; }
}

public interface IThingTransformStrategy<T> where T : IThing
{
string Transform(T thing);
}

public class FirstThingTransformStrategy : IThingTransformStrategy<FirstThing>
{
public string Transform(FirstThing thing)
{
return thing.CommonProperty + thing.FirstParticularProperty;
}
}

public class SecondThingTransformStrategy : IThingTransformStrategy<SecondThing>
{
public string Transform(SecondThing thing)
{
return thing.CommonProperty + thing.SecondParticularProperty;
}
}

public class ThingTransformer
{
private FirstThingTransformStrategy _firstThingTransformStrategy = new FirstThingTransformStrategy();
private SecondThingTransformStrategy _secondThingTransformStrategy = new SecondThingTransformStrategy();

public string TransformThing(IThing thing)
{
//Here is the issue
if (thing is FirstThing) return _firstThingTransformStrategy.Transform((FirstThing) thing);
if (thing is SecondThing) return _secondThingTransformStrategy.Transform((SecondThing) thing);
throw new NotImplementedException();
}
}

您有什么想法或模式名称可以解决我的问题吗?

非常感谢。

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