私は最近、非常に特定のニーズに応える画像編集ツールの作成を開始しました。これは、私自身の娯楽のためだけでなく、それを使用しようとしている人々にとっても同じです。しかし、私は早い段階で少し建築上の問題にぶつかりました。
他の画像エディタと同様に、ユーザーは「ツール」を使用して画像を描画および操作します。これに対する私の最初の試みは、単純なインターフェースで構成されていました。
public interface IDrawingTool
{
void DrawEffect( Graphics g );
// other stuff
}
これ(私は思った)は素晴らしくてきれいで、簡単なメンテナンスと拡張を可能にするでしょう。インターフェイスオブジェクトをに追加し、実行時に選択したオブジェクトのDrawEffectメソッドを呼び出すだけです。
このアプローチの問題は、さまざまな描画ツールが単一のインターフェイスに完全に準拠していないことです。たとえば、ペンツールは、機能するために描画するポイントを知っているだけで済みます。ただし、長方形には、現在の位置だけでなく、最初にクリックした点も必要です。ポリゴンツールは、複数のマウスクリックを追跡する必要があります。
これを実装するための良い方法を考えるのに苦労しています。私が今考えることができる最良の方法は、switchステートメントと各ツールのケースを含みます。これは、描画ロジックがToolタイプのオブジェクトによってカプセル化されるのではなく、Canvasクラスにあることを意味します。これは練習なので、正しい方法でやりたいと思います。よろしくお願いします。