我正在设计一个允许我在图形上绘制一些功能的应用程序。每个函数都将从我将传递给这个图形类的一组点中绘制出来。
有不同种类的点,它们都继承自 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 类,并且可以根据需要制作所有逻辑,但这不是要付出很大的代价吗?想上神班?