4

私は「階層」と呼ばれるオブジェクトを持つプログラムを作成しています。これはArrayList<ArrayList<String>>、適切なゲッターを備えた文字列()を含むリストのリストにすぎません。

ユーザーは、これらの階層の表現/フォーマットを選択できる必要があります。たとえば、階層[1,2,3,4]を{1,2,3,4}または(1-4)などとして表現するかどうかを選択できます。ファイルに書き込まれる前。

この種のデータとフォーマットの分離を行うための賢い/標準的な方法はありますか?HierarchyオブジェクトとFormattingオブジェクトだけで構成される「FormattedHierarchy」オブジェクトを作成することを考えていますが、これが適切な設計上の選択であるかどうかはわかりません。

ポインタ/ヒント/回答をありがとう。

4

3 に答える 3

6

実行できる最悪のことは、階層データ表現をフォーマットと結合することです。階層クラスは、フォーマットについて何も知らないはずです。私のアドバイスはHierarchyFormatter、いくつかの異なる実装で別個のインターフェースを作成することです。

コードは千の言葉の価値があると思います:

public interface HierarchyFormatter {
    String format(Hierarchy hierarchy);
}

public class BraceFormatter implements HierarchyFormatter {
    public String format(Hierarchy hierarchy) {
        //...
    }
}

public class RangeFormatter implements HierarchyFormatter {
    public String format(Hierarchy hierarchy) {
        //...
    }
}

これは、戦略デザインパターンと呼ばれます。一部のコードで階層をフォーマットする必要がある場合は、-anyinstanceのインスタンスを渡すだけHierarchyFormatterです。

階層を何らかのフォーマットで永続的にバインドする場合は、フォーマッターをステートフルにします。

public abstract class HierarchyFormatter {
    protected final Hierarchy hierarchy;

    public HierarchyFormatter(Hierarchy hierarchy) {
        this.hierarchy = hierarchy;
    }

    public abstract String format();
}

public class BraceFormatter extends HierarchyFormatter {
    public String format() {
        //...
    }
}

public class RangeFormatter extends HierarchyFormatter {
    public String format() {
        //...
    }
}

フォーマッタを作成するたびに、その中に階層クラスをカプセル化します。

于 2012-08-19T13:10:14.943 に答える
2

You can approach it as a Model-View pattern. Your model is the one containing the actual data: ArrayList<ArrayList<String>> and the view is the one doing the formatting, presenting the data in various ways. and that is the Formatting class.

于 2012-08-19T13:11:03.633 に答える
1

標準のメソッドと同様のメソッドを追加できtoString()ます。たとえばtoArrayString()、オブジェクトを{1,2,3,4}としてtoIntervalString()フォーマットしたり、(1-4)としてフォーマットしたりできます...

于 2012-08-19T13:10:09.560 に答える