我想创建一个使用文本参数创建对象的工厂。 需要创建的类不是从单个基类派生的,而是实现相同的接口。
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
{...}
我正在努力寻找哪些类作为我的地图的值来使它全部工作。如果上面有一些严重的设计问题,请告诉我。
答案 0 :(得分:0)
它认为代码气味将类型信息作为字符串传递为强类型语言,如C#。通常,你会看到这个写成:
ShapeFactory.Instance().Create(typeof(Triangle), settings);
或只是
ShapeFactory.Instance().Create<Triangle>(settings);
您要求的内容可以完成,但最好是传递类型信息,而不是在实例化对象时查找类型。如果您需要从类名创建一个类型,请查看Activator.CreateInstance
以了解如何执行此操作。解析类型可能并非易事,因此您也可能需要阅读Reflection,以了解框架如何完成类型解析。