Я разрабатываю редактор формы перетаскивания. Однако мне также нужен способ «соединять» фигуры вместе, где только другие фигуры могут быть связаны с другими фигурами. Например, квадрат может быть связан только с кругом, но треугольник может быть связан как с квадратом, так и с кругом.
Итак, я создал суперкласс "Shape", чтобы все другие фигуры были объектами классов, которые наследуются от класса Shape. В классе Shape я поместил метод с именем "canBeConnectedTo (Shape s)", который возвращает, может ли этот конкретный объект быть связан с другим конкретным объектом, но единственный способ увидеть, как это сделать, - использовать оператор instanceof, который приводит мне подумать, что может быть лучший дизайн шаблона.
В настоящий момент класс Square реализует метод следующим образом:
boolean canBeConnectedTo(Shape s) {
return s instanceof Circle;
}
Я хотел бы сделать это таким образом, чтобы формы, к которым может быть привязана конкретная форма, были параметризованы так, чтобы их можно было добавлять или удалять во время выполнения. Кроме того, он должен быть расширяемым, чтобы можно было легко добавлять новые фигуры без изменения кода.
Альтернатива, которую я придумал, заключается в создании переменной экземпляра в каждом объекте Shape, который содержит тип фигуры, которым является объект, но это не шаблон проектирования, это просто способ избежать использования instanceof без изменения структуры.
Значит, мое мышление изначально ошибочно или нет лучшего способа, чем упомянутая альтернатива?