Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 模式:相似的行为谁可以不同_Design Patterns - Fatal编程技术网

Design patterns 模式:相似的行为谁可以不同

Design patterns 模式:相似的行为谁可以不同,design-patterns,Design Patterns,我必须为一组类创建一个设计,这些类将创建不同格式的文档:PDF、Word、文本 所有此类文件都将具有类似的结构:页眉、标题、主文件和页脚。同一类文件的内部结构可以不同 IPage createTitle(); CreateHeader(); createMain(); createFooter(); AbstractPdfIPage implement IPage PdfReport extend AbstractPdfIPage IDocumentGeneration

我必须为一组类创建一个设计,这些类将创建不同格式的文档:PDF、Word、文本

所有此类文件都将具有类似的结构:页眉、标题、主文件和页脚。同一类文件的内部结构可以不同

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
适合策略模式中的任何地方,但我也不知道它到底做了什么。但为什么它是抽象的?定义属性,然后子类可以重用方法