我有一個GWT
Canvas
被繪製幾個Shapes
,像(我不知道如果我要爲一個接口的擴展或執行):如何根據instanceof對某個對象執行操作?
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()
:OB當然一個橢圓繪製不同於一個矩形rotate()
:橢圓可能會遵循不同的輪換規則delete()
:我後來可以想象,刪除Ellipse
對象應該遵循與刪除不同的規則10(因爲他們以後會代表我的應用程序中的某些對象)。
正如我還在設計:什麼你能建議我以後能有一個List,我只是執行像shape.draw()
或delete(shape)
和適當的方法,事情就會被自動調用?
我可以Interface Shape
這裏實現這一點:
interface Shape {
abstract draw();
abstract delete(Shape);
abstract rotate();
}
,這將對我必須從draw()
邏輯複製所有代碼,我所有的Shape
類的缺點在於:implement
這個接口,即使它們是隻是略有不同,或者根本沒有差異。
難道還有更好的方法嗎?
接口,然後是具有默認/通用功能的抽象類,以及擴展抽象類的具體類。 – 2013-03-26 10:00:38
計算出該方法的哪些位可以不同並且「抽象」那些。在「抽象形狀」中實現核心功能,以便在需要時覆蓋。 – 2013-03-26 10:00:59
除了實現繼承,您還可以按對象組合或靜態幫助方法共享代碼。無需複製/粘貼代碼。 – Thilo 2013-03-26 10:01:54