dev*_*ium 5 c# java oop design-patterns god-object
我正在设计一个允许我在图形上绘制一些函数的应用程序.每个函数都将从我将传递给此图形类的一组点中提取.
有不同类型的点,都是从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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
你会怎么做这样的事情?我有一种感觉,正确的方法是将绘图逻辑放在每个Point对象上(因此Point中的每个子类都知道如何绘制自己),但会出现两个问题:
我会按照您的建议进行操作,让每个点负责绘制自身,并将其他点的数组传递给它:
interface ICanDraw {
void Draw(ArrayList<Point> allPoints);
}
public abstract class Point : ICanDraw {
...
}
public PoniePoint : Point {
public void Draw(ArrayList<Point> allPoints) {
// do drawing logic here
}
}
Run Code Online (Sandbox Code Playgroud)
对于您的图形制作者:
public void DoDrawing() {
foreach (Point point in points) {
point.Draw(points);
}
}
Run Code Online (Sandbox Code Playgroud)
(我的 Java 有点生疏,所以这可能不是 100% 语法正确的 Java,但我认为它传达了我的建议)。