我必须为一组将以不同格式创建文档的类创建一个设计: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模式的专门化。
然而,由于设计模式本身建议我们应该偏爱组合而不是继承(根据我的经验,我完全同意这一说法),您应该考虑将相同的总体方法用于策略而不是模板方法。