Я разрабатываю приложение, которое позволит мне рисовать некоторые функции на графике. Каждая функция будет нарисована из набора точек, которые я передам этому графическому классу.
Существуют различные виды точек, все они наследуются от класса MyPoint. Для каких-то точек это будет просто выводить их на экран такими, какие они есть, другие можно игнорировать, другие добавлять, поэтому с ними связана какая-то логика, которая может стать сложной.
Как на самом деле рисовать графику здесь не главное. Меня беспокоит то, как сделать кодовую логику такой, чтобы этот класс GraphicMaker не стал так называемым God-Object.
Было бы легко сделать что-то вроде этого:
class GraphicMaker {
ArrayList<Point> points = new ArrayList<Point>();
public void AddPoint(Point point) {
points.add(point);
}
public void DoDrawing() {
foreach (Point point in points) {
if (point is PointA) {
//some logic here
else if (point is PointXYZ) {
//...etc
}
}
}
}
Как бы вы сделали что-то подобное? У меня есть ощущение, что правильным способом было бы поместить логику рисования в каждый объект Point (чтобы каждый дочерний класс из Point знал бы, как рисовать сам), но возникают две проблемы:
- Будут виды точек, которые должны знать все другие точки, существующие в классе GraphicObject, чтобы уметь рисовать себя.
- Я могу сделать многие методы / свойства из класса Graphic общедоступными, чтобы все точки имели ссылку на класс Graphic и могли делать всю свою логику по своему усмотрению, но не слишком ли это большая цена для платить за нежелание иметь класс Бога?