これはあまり具体的ではないことを願っています。xmlの抽象的なファクトリパターンで作成するオブジェクトを動的に選択します
クラスを取得するためにXJCでコンパイルするXMLスキーマを作成しました。 XMLは基本的にフォームのいくつかの要素(テキストフィールド、ラベルなど)を表します。 は、ここに抜粋です:
<gruppoOggetti id="string" nome="string">
<oggetto xsi:type="labelType" etichetta="string" id="string" obbligatorio="false" />
<oggetto xsi:type="listaOpzioni" id="string" obbligatorio="1">
<opzione id="string">string</opzione>
</oggetto>
<oggetto xsi:type="imageType" etichetta="string" id="string" obbligatorio="0" />
</gruppoOggetti>
あなたが見ることができるように、オブジェクトの型が属性XSIから定義されています。私はそれが自動的に右のクラスをinstatiate JAXBでXMLをunmashallときに入力します。
今質問: 私は抽象的なファクトリを実装してオブジェクトを作成していますので、基本的には、作成する必要があるオブジェクトに応じて、自分のファクトリの別のメソッドを呼び出す必要があります。 私が今使っているではない、かなり-満たす方法はこれです:
public OggettoBase creaOggetto(Factory f, OggettoType oggetto)
{
String tipo = oggetto.getClass().getSimpleName().toString();
OggettoBase ret = null;
switch(tipo)
{
case "CheckBoxType": ret = f.createCheckbox(); break;
case "ImageType":ret = f.createImage(); break;
case "LabelType":ret = f.createLabel(); break;
case "LinkType": ret = f.createLink(); break;
case "ListaOpzioni": ret = f.createLista(); break;
case "PasswordType": ret = f.createPassword(); break;
case "RadiobuttonType": ret = f.createRadiobutton(); break;
case "TextareaType": ret = f.createTextarea(); break;
case "TextfieldType": ret = f.createTextfield(); break;
default : System.out.println("Il tipo: "+tipo+" non esiste");
}
return ret;
}
私は他の方法を使用したい(編集:代わりに、スイッチ/例)、と私は列挙型が、私のことを考えました。私はかなりそこにいません。また、私は反射を使用したくない。
最終的には、[クラス登録を伴う工場パターン - 反射を使用して](http://www.oodesign.com/factory-pattern.html) – lepre