2012-07-23 61 views
0

我有一个静态类(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) 
    } 

我liekt创建常用方法一个基类(如实施例占用资源)。但是我想保持特定的类是静态的,或者避免创建更多的实例。

+0

如何使用策略模式?如果您显示一些代码示例,则可以更轻松地解决问题。 – 2012-07-23 13:52:14

回答

0

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

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);