Связывание с шаблоном наблюдателя приводит к циклической зависимости - PullRequest
0 голосов
/ 19 января 2019

Я хочу написать код, который похож на привязку JavaFX. У меня есть цифры f и с помощью getBounds (). GetLocation () я получил середину рисунка. Сначала я просто хочу смоделировать простые перемещения. Если я перемещу исходную фигуру вокруг вектора dx, зависимая фигура должна двигаться в том же направлении, а смещение должно иметь одинаковую длину.

public void Bindings.bind(Figure depend, Figure source){
Point p = new Point(source.getBounds().getLocation());
source.addFigureListener(e ->{
       int dx = source.getBounds().getLocation().getX() - p.getX();
       int dy = source.getBounds().getLocation().getY() - p.getY();
       if(dx!=0; dy!=0){
            depend.move(dx,dy);
            p.x = source.getBounds().getLocation().getX();
            p.y = source.getBounds().getLocation().getY();
       }
   });
}

Если я сейчас свяжу три цифры, я получу ошибку StackOverflow:

Bindings.bind(f2,f1);
Bindings.bind(f3,f2);
Bindings.bind(f1,f3);

Теперь я должен разорвать эти циклические зависимости. Я думаю, что лучший способ - проверить, поступает ли команда move с «консоли» (мышь, клавиатура). В противном случае фигуры не должны двигаться: в случае, если я двигаюсь f1, также должна двигаться только f2 (f3 не должно быть задействовано). У кого-нибудь есть идеи, как мне это решить?

...