如何在C#中为特定方法创建包装类

时间:2013-02-05 15:18:30

标签: c# wrapper

我需要为包含以下代码的类创建一个包装器。

PDDocument pdfDoc = PDDocument.load("C:\\Users\\Pictures\\Fillable.pdf");
PDDocumentCatalog docCatalog = pdfDoc.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
PDField field = acroForm.getField("last");
field.setValue("c#");
pdfDoc.save("C:\\Users\\Pictures\\Fillable.pdf");
pdfDoc.close(); 

我已经创建了两个包装类,但是对于接下来的步骤我有点困惑。

public class c_PDFdocu
{
    private PDDocument PD;

    public c_PDFdocu(string PDFPath)
    {
        PD = PDDocument.load(PDFPath);

    }
    public c_documentcatalog getDocumentCatalog()
    {

        return new c_documentcatalog(PD);
    }
}

public class c_documentcatalog
{
    private PDDocumentCatalog PDFDocCat;
    public c_documentcatalog(PDDocument PDFDoc)
    {
        PDFDocCat = PDFDoc.getDocumentCatalog();
    }

    public c_PDAcroForm getAcroForm()
    {
        return new c_PDAcroForm(PDFDocCat);
    }
}  


public class c_PDAcroForm
{
    private PDAcroForm acroForm;
    public c_PDAcroForm(PDDocumentCatalog docCatalog)
    {
        acroForm = docCatalog.getAcroForm();
    }
}

如何为剩余的语句创建包装类?

我需要将值传递给getField。它的用户视角类似于setvalue。它属于相同的变量名field

谢谢

1 个答案:

答案 0 :(得分:0)

你要做的就是创建一个'Facade'。 Facade(或包装器)本质上是一些代码,它采用困难,挑剔的代码并使其更易于使用。

在你的情况下,创建一个构造函数获取所需信息的类(例如路径)更有意义,然后创建在类本身内部完成所有困难的工作。例如:

class PDFdoc
{
   String path;
   PDDocument pdfDoc;
   PDDocumentCatalog docCatalog; 
   PDAcroForm acroForm; 
   PDField field;

   public PDFdoc(String path)
   {
      this.path = path;
      this.pdfDoc = PDDocument.load(path);
      this.docCatalog = pdfDoc.getDocumentCatalog();
      this.acroForm = docCatalog.getAcroForm();
      this.field = acroForm.getField("last");

      this.field.setValue("c#");
   }

   public Save()
   {
      this.pdfDoc.save(path);
   }

   public Close()
   {
      this.pdfDoc.close();
   }
}

现在,当您想要保存时,只需致电PDFdoc.SavePDFDoc.close,它将为您完成所有工作。关键是Facade 隐藏了关于类如何工作的所有困难细节,方法是将它封装(“包装”)在另一个具有更易于使用的界面的类中。