[英]c# factory of classes implementing the same interface
我想创建一个使用文本参数创建对象的工厂。 需要创建的类不是从单个基类派生的,而是实现相同的接口。
public class Square: IPrintable
{
...
}
public class Triangle: IPrintable
{
...
}
interface IPrintable
{
void print();
}
我希望能够通过以下方式创建对象:
PrinterSettings settings = new PrinterSettings("something");
ShapeFactory.Instance().Create("Triangle", settings);
我想创建一个包含映射的工厂,该映射以以下方式处理字符串ID:
public class ShapeFactory
{
static ShapeFactory singleton;
Dictionary<string, XXX > map;
private ShapeFactory(){};
public static ShapeFactory Instance()
{
...
return singleton;
}
public void register(string ID, XXX obj);
public IPrintable Create(string ID, PrinterSettings obj);
}
public SquareFactory
{...}
public TriangleFactory
{...}
我正在努力寻找将什么类用作地图值以使其全部正常工作。 如果上面有一些严重的设计问题,请告诉我。
它认为代码气味会将类型信息作为字符串传递给像C#这样的强类型语言。 通常,您会看到这样写:
ShapeFactory.Instance().Create(typeof(Triangle), settings);
或简单地
ShapeFactory.Instance().Create<Triangle>(settings);
您所要求的可以实现,但是最好将其传递给类型信息,而不是在实例化对象时查找类型。 如果需要从类名称创建类型,请查看Activator.CreateInstance
来了解如何执行此操作。 解析类型可能很简单,因此您可能还需要阅读Reflection,以了解框架如何实现类型解析。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.