为静态类生成通用基类

时间:2012-07-23 13:49:48

标签: c# design-patterns hierarchy factory-pattern base-class

我有一个静态类(VS 2010 / C#),用于从模板生成pdf文档。我们使用iTextSharp API生成pdf。该类是静态的,仅提供生成特定文档的公共方法。

现在我们需要实现一个新的文档类来生成不同类型的文档。我想创建一个基类,因为一些方法将由两个类共享,而其他方法将特定于每个文档类型。

为了使特定(子)类保持静态并避免使基类在特定类之外公共或可调用,更好的方法是什么?

我目前正在研究工厂模式或组合。

编辑:这里是当前特定的类代码:

public static class SpecificDocGenerator
{
    /// <summary>
    /// Generates an international certificate.
    /// </summary>
    public static byte[] GenerateItDoc(DocInfo info)
    {
      //Here the document is generated and returned as byte array
    }


    /// <summary>
    /// Gets the resource.
    /// </summary>
    private static byte[] GetResource(string name)
    {
        //Gets a local resource (as example an image)
    }

我会为常用方法创建一个基类(例如GetResource)。但我想保持特定的类静态或避免更多的实例。

2 个答案:

答案 0 :(得分:0)

静态方法不是虚拟的,也不能被覆盖,因此您不能拥有带有抽象静态方法的基类。如果你想拥有一个类层次结构,那么你需要使这个类,至少一些方法,非静态的。话虽如此,仍然可以将单个公共静态方法作为入口点,并使实例方法完全在该单个静态方法的范围内使用。

答案 1 :(得分:0)

您可以使用Singleton模式而不是静态类。这将允许您使用继承:

public sealed class SpecificDocGenerator : AbstractDocGenerator
{
    private static readonly SpecificDocGenerator _instance;

    static SpecificDocGenerator
    {
       _instance = new SpecificDocGenerator();
    }

    public SpecificDocGenerator Instance
    {
        get { return _instance; }
    }

    private SpecificDocGenerator()
    {
    }

    public byte[] GenerateItDoc(DocInfo info)
    {
       //Here the document is generated and returned as byte array
    }

    private byte[] GetResource(string name)
    {
        //Gets a local resource (as example an image)
    }
}

您可以使用其他Singleton实现,但这是最简单的。 用法:

SpecificDocGenerator.Instance.GenerateItDoc(info);