Design patterns 模式:相似的行为谁可以不同
我必须为一组类创建一个设计,这些类将创建不同格式的文档:PDF、Word、文本 所有此类文件都将具有类似的结构:页眉、标题、主文件和页脚。同一类文件的内部结构可以不同Design patterns 模式:相似的行为谁可以不同,design-patterns,Design Patterns,我必须为一组类创建一个设计,这些类将创建不同格式的文档:PDF、Word、文本 所有此类文件都将具有类似的结构:页眉、标题、主文件和页脚。同一类文件的内部结构可以不同 IPage createTitle(); CreateHeader(); createMain(); createFooter(); AbstractPdfIPage implement IPage PdfReport extend AbstractPdfIPage IDocumentGeneration
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);
在生成文档中,我可以有如下内容
if( page!=null){
page.createTile();
page.createHeader();
...
}
所以我可以有不同的createTitle、createHeader、createMain和createFooter实现
做这种行为有什么模式吗
编辑:
因为我希望能够重用这些方法
createTitle();
createHeader();
createMain();
createFooter()
我认为他们有两种可能,为每个方法创建一个接口,并创建一个类,得到类似的结果
if( page!=null){
page.createTile();
page.createHeader();
...
}
生成文件(ICreateTitle ict、ICreateHeader ich…)
或者使用类来扩展实现某种方法的抽象类
AbstractPdfIPage实现IPage
AbstractPdfIPage将实现所有这些方法。
因此,我将有可能重用或重新实现这些方法中的任何一种
不知道女巫是最好的,如果有更好的,你刚才已经描述了,这是女巫的一个特化
然而,由于它本身建议我们应该在继承< <强> >(一个声明,根据我的经验,我完全同意),你应该考虑用相同的整体方法来代替模板方法。
我不知道我是否可以使用策略模式。createTitle、createHeader、createMain、createFooter方法的行为可能不同,在我看到的策略示例中,就像在wikipedia(执行示例)上一样,只重新定义了一个方法。我想用同样的方法生成文档,但这一个有一些其他人可以重新定义。也许有更好的解决方案?您可以定义一个定义createTitle
、createHeader
、createMain
和createFooter
方法的策略接口,或者您可以定义四个不同的策略接口,每个接口定义其中一个方法。可能。。。从您提供的代码中很难看出这一点。纯策略的使用不需要继承,所以我不认为AbstractPdfIPage
适合策略模式中的任何地方,但我也不知道它到底做了什么。但为什么它是抽象的?定义属性,然后子类可以重用方法