2012-07-23 2 views
0

템플릿에서 PDF 문서를 생성하는 데 사용되는 정적 클래스 (VS 2010/C#)가 있습니다. 우리는 iTextSharp API를 사용하여 pdf를 생성합니다. 클래스는 정적이며 특정 문서를 생성하는 public 메서드 만 제공합니다.정적 클래스에 대한 일반 기본 클래스 생성

이제는 다른 종류의 문서를 생성하기 위해 새 문서 클래스를 구현해야합니다. 두 클래스가 일부 메소드를 공유하기 때문에 기본 클래스를 작성하고 다른 클래스는 각 문서 유형에 고유하게 적용됩니다.

특정 (하위) 클래스를 정적으로 유지하고 기본 클래스를 특정 클래스 외부에서 공용 또는 호출 가능하게 만들지 않으려면 어떻게하면 더 좋은 방법이 될까요?

현재 공장 패턴 또는 구성을 찾고 있습니다.

편집 : 여기에 현재 특정 클래스 코드 : I (예의 getResource 등) 일반적인 방법에 대한 기본 클래스를 만들 liekt 것

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

. 하지만 특정 클래스를 정적으로 유지하거나 더 많은 인스턴스를 만드는 것을 피하고 싶습니다.

+0

전략 패턴은 어떻게 사용합니까? 몇 가지 코드 예제를 보여 주면 문제가 발생하기 쉽습니다. –

답변

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

다른 싱글 톤 구현을 사용할 수 있지만 가장 간단합니다. 용도 :

SpecificDocGenerator.Instance.GenerateItDoc(info); 
관련 문제