私は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()
またはdelete(shape)
などを実行できるリストを作成して、適切なメソッドが自動的に呼び出されるようにするために、何を提案できますか?
私はここでこれを達成することができましInterface Shape
た:
interface Shape {
abstract draw();
abstract delete(Shape);
abstract rotate();
}
draw()
、これには、ロジックからこのインターフェイスのすべてのShape
クラスにすべてのコードをコピーする必要があるという欠点がありimplement
ます。たとえそれらがわずかに異なっていても、あるいはまったく異なっていなくても。
より良いアプローチはありますか?