【发布时间】:2019-11-22 21:25:30
【问题描述】:
我有一个无法单独解决的架构问题。
- 我有一系列对象实现了相同的接口 (IThing)。
- 我想对“ITing”集合的每个对象应用转换。
- 转换取决于接口的实现。
- 接口实现的转换被封装在一个类中。 (策略模式)
我的问题是,在某个地方,我总是以开关类型或一组 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();
}
}
您有什么想法或任何模式名称来解决我的问题吗?
非常感谢。
【问题讨论】:
标签: c# design-patterns architecture