繁体   English   中英

Circle实施-如何建模以获取此信息

[英]Circle implementation - How to model in order to fetch this information

1. Find circle diameter from radius
2. Find circle diameter from perimeter
3. Find circle diameter from area

4. Find circle perimeter from diameter
5. Find circle perimeter from radius

6. Find circle radius from diameter
7. Find circle radius from perimeter
8. Find circle radius from area

当前,我们的模型类是这样实现的。

class Circle {
  double radius;

  Circle (double r) {
  }

// Solves 6,7,8
      double getDiameter() {}
      double getPerimeter() {}
      double getArea() {}

// static functions to solve 1-5
// e.g. public static double getPermiter(double diameter) {..}
    }

是否有更好的方法为上述类别建模,以便我可以获取上述信息,因为在给定特定参数(例如半径,直径,面积或周长)的情况下,期望用户找到其他信息。

我可能更喜欢Circle类,并带有使用radius的构造函数。 您可以添加静态工厂方法以从周围和区域创建实例。

public class Circle
{
    double radius;

    public Circle(double radius)
    {
        this.radius = radius;
    }

    public static Circle fromCircumference(double circumference)
    {
        return new Circle(circumference / (Math.PI * 2));
    }

    public static Circle fromArea(double area)
    {
        return new Circle(Math.sqrt(area / Math.PI));
    }

    public double getCircumference()
    {
        return 2 * Math.PI * radius;
    }

    public double getRadius()
    {
        return radius;
    }

    public double getDiameter()
    {
        return 2 * radius;
    }

    public double getArea()
    {
        return Math.PI * radius * radius;
    }
}

我将所有8种方法实现为Circle类(或可能在关联帮助程序类中)中的静态公共方法,并通过调用上面定义的适当的静态方法来声明get {Diameter,Perimeter,radius}:

public class Circle {
  double radius;

  public double getPerimeter() {
    return getPerimeterFromRadius(radius);
  }

  // ... 

  public static double getPerimeterFromRadius(double radius) {
    return 2 * Math.PI * radius;
  }

}

据我了解,您并不总是需要一个圆本身,但是,例如,您想通过给定的半径来计算潜在的圆面积。

我宁愿将所有这些静态函数移至单独的实用程序类。 按照约定,此类名称是与其一起使用的类或接口的复数形式。 因此,它将被命名为Circles

public class Circles {

    public static double diameterFromRadius(double radius) {...}

    public static double diameterFromPerimeter(double perimeter) {...}

    public static double perimeterFromArea(double area) {...}

    ...
}

如果由于某些原因您仍然需要Circle类,请考虑使您的圈子不可变(如果不是这样),即删除任何设置器并将所有字段定为final

public class Circle {
  final double radius;

  public Circle (double r) {
      this.radius = r;
  }

  public double getRadius() {
      return radius;
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM