Паттерн Singleton на Java

161
07 апреля 2022, 13:30

Была дана задача:

/**
 * Создайте класс окружности Circle на координатной плоскости
 * Инициализация - радиус.
 * Он должен уметь:
 * 1) Предоставлять площадь круга, ограниченного этой окружностью.
 * 2) Изменять положение центра окружности.
 * 3) Отвечать на вопрос, есть ли пересечения хотя бы в 1 точке с другой окружностью.
 * 4) Вычислять расстояние до другой окружности(расстояние между их центрами).
 */
public class Circle {
    final double INITIAL_RADIUS = 0.0D;
    final double INITIAL_xCoordinate = 0.0D;
    final double INITIAL_yCoordinate = 0.0D;
    private double radius;
    private double xCoordinate;
    private double yCoordinate;
    public Circle() {
        this.radius = INITIAL_RADIUS;
        this.xCoordinate = INITIAL_xCoordinate;
        this.yCoordinate = INITIAL_yCoordinate;
    }
    public Circle(double radius) {
        this.radius = radius;
        this.xCoordinate = INITIAL_xCoordinate;
        this.yCoordinate = INITIAL_yCoordinate;
    }
    public double squareOfCircle() {
        return Math.PI * this.radius * this.radius;
    }
    public void setCenterOfCircle(double xCoordinate, double yCoordinate) {
        this.yCoordinate = yCoordinate;
        this.xCoordinate = xCoordinate;
    }
    public double distanceBetweenCenter(Circle circle) {
        double x = Math.abs(circle.xCoordinate - this.xCoordinate);
        double y = Math.abs(circle.yCoordinate - this.yCoordinate);
        return Math.sqrt(x * x + y * y);
    }
    public boolean isIntersect(Circle circle) {
        return distanceBetweenCenter(circle) <= (circle.getRadius() + this.radius);
    }
    public double getRadius() {
        return radius;
    }

}

Думаю сделал в ней все не так уж и плохо. Но вот вторую почему-то не получается понять, с паттернами раньше не работал) Прошу вашей помощи, все ли я правильно сделал ?

/**
 * 4. Написать синглтон для Circle.
 * Синглтон(одиночка) - некая схема, которая гарантирует,
 * что в программе будет объект некоторого класса в единственном экземпляре.
 * Подумать, как подправить класс из предыдущего задания, чтобы такая схема имела место.
 */
public class Circle {
    private static Circle circle;
    private double radius;
    private double xCoordinate;
    private double yCoordinate;
    private Circle(double radius, double xCoordinate, double yCoordinate) {
        this.radius = radius;
        this.xCoordinate = xCoordinate;
        this.yCoordinate = yCoordinate;
    }

    public static Circle getInstance(double radius, double xCoordinate, double yCoordinate) {
        if (circle == null) {
            circle = new Circle(radius, xCoordinate, yCoordinate);
        }
        return circle;
    }

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

}

Буду рад любой помощи :)

PS: поправил метод :

public static synchronized Circle getInstance(double radius, double xCoordinate, double yCoordinate) {
    if (circle == null) {
        circle = new Circle(radius, xCoordinate, yCoordinate);
    }
    return circle;
}
READ ALSO
Как разделить коллекцию на несколько других коллекций?

Как разделить коллекцию на несколько других коллекций?

Допустим, у меня 5 полок для книгТак же имеется коллекция (Collection<String>) с названиями книг

165
Intellij idea не работает. Не знаю в чем проблема

Intellij idea не работает. Не знаю в чем проблема

Я создал проект и после его сохранения и загрузки он перестал видеть директории и в том числе класс "main"

208
Метод toString()

Метод toString()

У меня вопрос про использование метода toString(), его переопределение На сколько я знаю, он используется для удобного вывода данных об объекте...

217