模式:相似的行为可以是不同的



我必须为一组将以不同格式创建文档的类创建一个设计:PDF, Word, text。

所有这类文件都有类似的结构:header, title, main, footer。同一类型文件的内部结构可以不同。

IPage
  createTitle();
  CreateHeader();
  createMain();
  createFooter();
AbstractPdfIPage implement IPage
PdfReport extend AbstractPdfIPage
IDocumentGeneration
  generateDocument();

WordGeneration implement IDocumentGeneration
  generateDocument(IPage page);
PdfGeneration implement IDocumentGeneration
  generateDocument(IPage page);

在generateDocument中我可以输入

if( page!=null){
    page.createTile();
    page.createHeader();
    ...
}

所以我可以有不同的实现createTitle, createHeader, createMain, createFooter

这种行为有什么规律可循吗?

编辑:

因为我希望有可能重用这些方法,

createTitle ();createHeader ();createMain ();

createFooter ();

我认为他们有两种可能性,为每个方法创建一个接口,创建一个类,得到像

这样的东西

generateDocument(ICreateTitle ict, ICreateHeader ich…)

或者使用继承抽象类的类来实现一些方法

AbstractPdfIPage实现page

AbstractPdfIPage将实现所有这些方法。所以我将有可能重用或重新实现这些方法中的任何一个

不知道哪一个是最好的,如果有更好的

您刚刚描述了Builder模式,它是Template Method模式的专门化。

然而,由于设计模式本身建议我们应该偏爱组合而不是继承(根据我的经验,我完全同意这一说法),您应该考虑将相同的总体方法用于策略而不是模板方法。

最新更新