0

ウィザード形式の画像処理ソフトウェアを構築しています。GUI、Engine、Core_Algorithms の 3 つのレイヤーで構成されています。

ウィザード:アプリの各「パネル」は、ユーザーに何かをするように求めます。例: 最初のパネルはユーザーにいくつかの画像をロードするように求め、次のパネルは「シード領域成長」(SRG) アルゴリズムを適用し、「魔法の杖ツール」を使用して結果を調整するようにユーザーに求めます。

舞台裏で何が起こっているか:すべてのアルゴリズムはパッケージ「コア」に保持されています (そして、GUI から完全に独立しています)。すべてのデータ項目 (アプリ全体) は、単一のクラス ( Data.java ) に格納されます。

データ.java

/*Stores ALL the necessary data items*/
public class Data{

    BufferedImage sourceImage, targetImage;
    BufferedImage srcGrownImg;
    Point srcPoint, tarPoint;//and many more data items for each algorithm and panel
}

別のクラス ( Data.javaから拡張された Engine.java ) は、これらのデータ項目を使用し、適切なアルゴリズム (「コア」パッケージの SRG.java など) を実行し、項目を (Data.java 内に) 格納します。ウィザードの各フェーズには「Engine.java」の同じインスタンスがあるため、アルゴリズムを設定して実行し、結果を取得できます。

エンジン.java

/*Runs algorithms inside "core"*/
public class Engine extends Data{
    public growSource()
    {
        SRG srgObj = new SRG(srcImg, srcSeeds);
        srcGrownImg = srgObj.runAndGetResult();
    }//and many more functions for each panel
}

問題:私たちが抱えている問題は、「Data.java」と「Engine.java」が長すぎることです。Engine.java は短くてわかりやすい関数 (3 ~ 4 行) で構成されています (ただし、ウィザード全体で使用される関数はすべてその中に格納されているため、非常に長くなります)。

質問: "Data.java" と "Engine.java" が短くなるように、コードを分割する方法についてアドバイスが欲しいです。

4

1 に答える 1

1

アダプター パターンを適用して、runAndGetResult(). その結果、有効にする方法と同じ数の具体的な実装を持つことになりますrunAndGetResult()

このは、単一の抽象関数のパターンを示してeval()いますが、複数のインターフェイスを実装することもできます。クラス リテラルは、名前で実装を取得するためのランタイム タイプ トークンとして使用されますが、レジストリも可能です。

GUI では、アダプターはAbstractAction、ボタン、メニュー項目、および を受け入れるその他のコンポーネントで使用するために拡張される場合がありますAction。オフライン処理の場合、アダプタのリストを GUI で作成し、後で別のスレッドで所定の順序で評価できます。

于 2012-08-13T04:20:47.260 に答える