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_Coding Style - Fatal编程技术网

Java 传递最小参数好吗?

Java 传递最小参数好吗?,java,design-patterns,coding-style,Java,Design Patterns,Coding Style,假设我有一辆对象车,有五个参数,{numwheels,color,miliety,horspower,maxSpeed}。 我有一个方法需要这些值中的3个。 两个选项中哪一个被认为是最佳实践? 传递封闭对象并减少参数的数量更好吗,还是只将简单的最小数据传递给一个方法(例如:方法2中不会访问numwheels和color) 选项1传递整个对象: void compute(Car c, Person p) { return c.mileage + c.horsepower + c.maxSp

假设我有一辆对象车,有五个参数,{numwheels,color,miliety,horspower,maxSpeed}。 我有一个方法需要这些值中的3个。 两个选项中哪一个被认为是最佳实践? 传递封闭对象并减少参数的数量更好吗,还是只将简单的最小数据传递给一个方法(例如:方法2中不会访问numwheels和color)

  • 选项1传递整个对象:

    void compute(Car c, Person p) {
        return c.mileage + c.horsepower + c.maxSpeed + p.age;
    }
    
  • 选项2:只传入方法值

    void compute(int mileage, int horsepower, int maxSpeed, int age) {
        return mileage + horsepower + maxSpeed + age.;
    }
    

  • 注意:由于某种原因,假设compute不能作为Car类的一部分。请在回答时牢记这一假设

    我建议第三种选择:在Car中添加“compute”方法

    这就是所谓的“说,不问”


    请参见

    最好传递封闭对象,因为计算中所需参数数量的任何更改都不会影响将来的方法签名

    实际上,您可以接受接口类型,例如,
    Vehicle
    。这允许同样的方法在以后计算
    自行车
    喷气机等的数据

    public int compute(Vehicle veh) {
        return veh.computePerformance();
    }
    
    其中
    Car
    实现方法如下

    public int computePerformance() {
        return mileage + horsepower + maxSpeed;
    }
    

    其思想是编写易于扩展的代码。

    我建议第二种选择

    为什么?

    假设一:其他类使用您的计算方法来计算里程,例如“类所有者”

    假设二:假设明天您的计算方法还需要来自class Car的一个属性来计算里程年龄

    如果您选择选项一:那么您必须在方法compute中再引入一个参数,这将导致在调用您的方法的其他类中出现编译问题。在本例中为“类所有者”


    如果您选择选项二:您可以灵活地更新您的计算方法实现,而不影响使用此方法的任何其他类

    ,这可能是由您的品味决定的。遵循约定总是有帮助的,所以我认为使用较少的参数更常见、更有意义,最重要的是更灵活(更改
    Car
    类中的字段不会更改方法签名)假设我们
    compute
    需要另一个名为truck的对象,并且由于某种原因不能成为car的一部分?@JavaDeveloper可能会制作一个抽象超类Vehicle,并在其中实现一个非抽象方法
    compute
    。将Car、Truck和所有您需要的东西都从中继承(或者如果您希望稍后在子类中实现它,则将其抽象化)。然后所有子类都将自动具有
    compute
    。实际上,您可以将
    里程
    马力
    最大速度
    字段全部移动到超类。@Shashank假设
    计算
    需要另一个与该类继承人身份无关的类人员。问题的关键不是学习继承,而是传递更多的参数和传递单个对象。如果您必须在这两个选项之间做出选择,那么传递单个对象总是更好。@Shashank回答!最好传递封闭对象,因为计算中所需参数数量的任何更改都不会影响将来的方法签名。-这就是答案!