我正在寻找一种巧妙的方法来为我的几何集合实现一个很酷的设计模式。现在我在几何类型层次结构的顶部有一个名为Geometry
的特征。我们的想法是让每个几何体都继承特征,然后为特定类型的几何体实现特定的代码。作为几何对象,这些几何形状当然需要实现各种方法。例如,计算到任何其他几何体的距离的能力 - 我称之为distanceTo
。最干净的方法必须是Geometry
特征中的方法如下:
def distanceTo(geometry : Geometry) : Double
我的问题是:如何在几何体中实现此方法(比如Rectangle
),而不必对存在的每个形状进行类型检查?是否有任何方便的方法将请求委托给各个几何图形?
干杯,
答案 0 :(得分:2)
由于Scala没有multiple dispatch,您最好的选择是对几何对象进行模式匹配。像
这样的东西(geo1, geo2) match {
case (Rectangle(x1,y1,w1,h1), Rectangle(x2,y2,w2,h2)) => ....
...
}
然后,您可以在调用此方法的Geometry
特征上定义一个便捷方法。如果Geometry
是密封特征,编译器甚至会在模式匹配时警告您丢失的情况。