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 在JAVA中使用什么设计模式?_Design Patterns - Fatal编程技术网

Design patterns 在JAVA中使用什么设计模式?

Design patterns 在JAVA中使用什么设计模式?,design-patterns,Design Patterns,我有一组输入,有不同的方法接受这些输入,并在同一个类中执行不同的任务。我应该在这里使用工厂模式吗?因为方法签名是相同的,并且在实现不同的地方创建不同的类?案例数量比较多,工厂模式好吗 例如,我有一个打开文件类型的开关,几乎有20种文件类型,所以有20个开关案例。看看下面两个这样的例子,我有20多个这样的例子 switch( fileType ) { case SIMPLE_FILE: processSIMPLEData( s

我有一组输入,有不同的方法接受这些输入,并在同一个类中执行不同的任务。我应该在这里使用工厂模式吗?因为方法签名是相同的,并且在实现不同的地方创建不同的类?案例数量比较多,工厂模式好吗

例如,我有一个打开文件类型的开关,几乎有20种文件类型,所以有20个开关案例。看看下面两个这样的例子,我有20多个这样的例子

switch( fileType ) {
                case SIMPLE_FILE:
                    processSIMPLEData( stepInput, stepOutput,ackFilePath, errorFilePath );
                break;
                case MUL_FILE:
                   processMULData( stepInput, stepOutput,ackFilePath, errorFilePath );
                break;

..

是,使用出厂模式。上图中,从文件类型到文件类型处理程序的映射是有意义的。看到许多参数,这是一种“代码气味”,因为这些参数在某种程度上必须在任何地方都要处理,因此最好在参数类或构建器模式中卸载这些参数(当一个不存在的特性被参数化时可以发出警报)。

我不确定您试图解决什么问题。设计模式说明了动机和适用性,而您的问题并没有回答这个问题,因为它缺少上下文。你想解决什么问题

从上面的代码来看,您似乎拥有一个依赖于文件类型的处理功能。一个简单的选择是为文件类型创建一个类层次结构,并添加一个方法进程,该进程被不同的文件类型覆盖。创建时,需要文件类型和类之间的映射。这可能是一个工厂,但工厂解决了另一个问题,即用户可以在不知道具体类型的情况下创建对象。因此,您不必编写
文件f=new SpecificFileType()
,而是从工厂查询一个新实例,得到一个您不知道也不关心的对象类型


如果您有一个文件类型的层次结构,并且希望能够通过对文件的操作来扩展它,那么您应该查看Visitor。

一个域对象的简短示例和一些代码会很有帮助。我已经更新了问题陈述,请看一看。@Prastan查看。这个问题更适合程序员。不过stackexchange。@AlexanderDerck在提到其他网站时,指出@gnat True没有考虑这一点通常是有帮助的。感谢您的回答,是的,将参数卸载到参数类是一个很好的建议。但我担心的是,如果我为所有这20多个用例编写工厂模式,在可以添加更多内容的地方,我需要编写20多个类来编写实际的实现。有什么建议吗?一个很好的基类。但是如果您有那么多的案例,比如说业务逻辑,如果语句很多,那么声明性定义就很好了。比如说XML。“过程…”有点不合群。所以我无法判断形势。重构可以是增量的。目前相同的签名被不同的方法使用,它们都在做不同的事情,我的问题是“这是正确的方法”还是我应该有更好的方法?只有“相同的签名被不同的方法使用,它们都在做不同的事情”我想说的唯一信息是文件类型的类层次结构。设计模式在不同的层次上解决问题,如果没有进一步的上下文,就很难给出建议。