まず、やりたいことを分類してみてください (XML ファイルを出力する、何かを何かに変換する)。設計パターンは 3 つのカテゴリに分類されます。
この場合、xml ライターといくつかのコンバーターの 2 種類のクラスがあります。xml ライターは基本的にビルダーです (ファイルを作成します)。
XmlWriter writer = new XmlWriter();
writer.writeHeader();
for (Item item : xmlitems) {
writer.write(convert(item));
}
writer.close();
現在、クラスから xml への実際の変換は、いくつかのクラスによって行われます。クラスをテストし、それらを特定のコンバーターに転送するメソッドがあると述べています。このクラスは、何かの新しいインスタンスを作成すると主張できるため、作成パターンに分類されます。
IMO に適した 3 種類のパターンがあります。
オブジェクトの具体的なクラスを指定せずに、関連オブジェクトまたは依存オブジェクトを作成するためのインターフェイスを提供する抽象ファクトリ パターン。
同じ構築プロセスで異なる表現を作成できるように、複雑なオブジェクトの構築をその表現から分離するビルダー パターン。
クラスがインスタンス化をサブクラスに延期できるようにするファクトリ メソッド パターン。
出典:ウィキペディア
私によると、どちらかが適切です。実装が似ているため、ビルダー パターンが適切です。
public interface Converter {
void convert(Item item);
XmlTextNode getResult(); // get xml code
}
つまり、クラスに何かを与えると、結果が得られます。
インスタンス化を他のクラス(あなたが話したリダイレクトメソッド)に任せるので、ファクトリパターンは適切です
public XmlTextNode convert(Item item) {
if (item instanceof ConcreteItem) {
return new ConcreteConverter(item).getResult();
}
throw new InvalidOperationException("Invalid convert type");
}
いずれの場合も、返されるアイテムの実際のタイプは重要ではありません。「パターンを定義」する場所によって少し異なります。型を切り替えるメソッドにあるのか、それとも実際の作成/コンバーター クラスにあるのか。
繰り返しますが、私はこの事件の専門家ではありません。