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
Java 长参数列表,其中一组参数可以分组到现有类,但这些参数不是从对象收集的_Java_Design Patterns - Fatal编程技术网

Java 长参数列表,其中一组参数可以分组到现有类,但这些参数不是从对象收集的

Java 长参数列表,其中一组参数可以分组到现有类,但这些参数不是从对象收集的,java,design-patterns,Java,Design Patterns,下面的代码是长参数列表气味方法 // Long Parameter List Smell public void paint (Graphics gr, double x, double y, double width, double height, Boolean shouldValidate){.....} 下面的代码是调用上述气味的调用方方法 // Caller public void someMethod(.

下面的代码是长参数列表气味方法

// Long Parameter List Smell
public void paint (Graphics gr, 
                   double x, double y, double width, double height,
                   Boolean shouldValidate){.....}
下面的代码是调用上述气味的调用方方法

// Caller
public void someMethod(......){
    double x = someMethod();
    double y = 200;
    double width = 100;
    double height = width/2;
    paint(gr, x, y, width, height, true);
}
我们可以注意到,参数double x、double y、double width和double height听起来像一个矩形对象。这些参数不是从对象收集的,因此我们不能使用“保留整个对象”。下一个选项是引入参数对象。然而,已经存在类Rectangle2D.Double,它是Java库中现有的类

我应该将这些参数分组到Rectangle2D.Double的对象中吗?重构后的代码如下所示。如果可以这样重构的话。我可以称这种重构为什么

// Long Parameter List Smell
public void paint (Graphics gr, 
                    Rectangle2D.Double rec
                    Boolean shouldValidate){.....}


// Caller
public void someMethod(......){
    double x = someMethod();
    double y = 200;
    double width = 100;
    double height = width/2;        
    paint(gr, 
          new Rectangle2D.Double(x, y, width, height), 
          true);
}
那么:

public void someMethod(......){
    Rectangle2D.Double rect = new Rectangle2D.Double(someMethod(), 200, 100, 50);
    paint(gr, rect, true);
}
??只是有点不同,但可能更容易阅读

要回答您关于术语的问题,如何合并参数对象