我必须为一组类创建一个设计,该类将以不同的格式创建文档: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将实现所有这些方法。 所以我有可能重用或重新实现任何这些方法
不知道女巫是最好的,如果有更好的那个
答案 0 :(得分:2)
您刚刚描述了Builder pattern,这是Template Method pattern的专业化。
但是,由于Design Patterns本身建议我们青睐基于继承的构成(根据我的经验,我完全同意这个陈述),你应该考虑使用相同的整体使用Strategy代替模板方法。