我有一个GWT
Canvas
正在绘制几个Shapes
,例如(我不确定我是否要扩展或实现接口):
Rectangle extends/implements Shape;
Ellipse extends/implements Shape;
对于每个Shape
我想显示自己的上下文菜单,即将上下文菜单小部件设置为弹出窗口,如:
if (shape instanceof Rectangle) {
Widget contextmenu = new RectangleContextMenu();
} else if (shape instanceof Ellipse) {
Widget contextmenu = new EllipseContextMenu();
}
popup.setWidget(contextmenu);
popup.show();
我在这里使用 GWT 并不重要,因为这可能是一个通用的设计问题:
如何对我的 Shape 对象进行操作并始终调用应该属于该实例的操作?
例如,其他操作可能是:
draw()
:当然,椭圆的绘制方式与矩形不同rotate()
: 椭圆可能遵循不同的旋转规则delete()
:我以后可以想象删除Ellipse
对象应该遵循与删除不同的规则Rectangles
(因为它们稍后将代表我的应用程序中的某些对象)。
由于我仍在设计中:您有什么建议让我以后可以有一个列表,我可以在其中执行诸如shape.draw()
or之类的事情,delete(shape)
并且将自动调用适当的方法?
我可以通过Interface Shape
这里实现:
interface Shape {
abstract draw();
abstract delete(Shape);
abstract rotate();
}
,这将有一个缺点,即我必须将所有代码从draw()
逻辑复制到该接口的所有Shape
类中implement
,即使它们只是略有不同,或者它们根本没有区别。
有没有更好的方法?