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

时间:2014-03-11 01:33:05

标签: design-patterns

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

所有这类文件都有类似的结构:标题,标题,主页,页脚。对于同一类文件,内部结构可能不同。

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实现IPage

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

不知道女巫是最好的,如果有更好的那个

1 个答案:

答案 0 :(得分:2)

您刚刚描述了Builder pattern,这是Template Method pattern的专业化。

但是,由于Design Patterns本身建议我们青睐基于继承的构成(根据我的经验,我完全同意这个陈述),你应该考虑使用相同的整体使用Strategy代替模板方法。