繁体   English   中英

c#类的工厂实现相同的接口

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM