core
私はUIコンポーネントをAbstractFactory
担当するJavaライブラリを使用しています。MyApplication はコアを使用し、UI をカスタマイズします。したがって、MyApplication の起動時に、MyFactory を AbstractFactory のインスタンスとして設定します。
class AbstractFactory {
...
public static AbstractFactory getInstance();
public abstract JButon createButton();
public abstract JLabel createLabel();
...
}
class MyFactory extends AbstractFactory {
...
}
MyApplication.startup() {
AbstractFactory.setInstance(new MyFactory())
}
私の問題は、たとえば MyApplication で JList を作成する必要があることですが、public JList createJList()
コア ライブラリを変更できないため、AbstractFactory に追加できません。
何をすればよいでしょうか?
ケース 1:
常にMyFactory.getMyFactoryInstance()
MyApplication、新しい静的フィールドで呼び出します。
class MyFactory extends AbstractFactory {
private static MyFactory myInstance = new MyFactory();
public static getMyFactoryInstance() { return myInstance }
...
}
ケース 2:
常にMyFactory.getMyFactoryInstance()
MyApplication を呼び出し、キャストを使用する
class MyFactory extends AbstractFactory {
public static MyFactory getMyFactoryInstance() {
if (getInstance() instanceOf MyFactory) {
return (MyFactory) getInstance();
}
throw Exception();
}
...
}
ケース 3: 2 つのファクトリを使用します。JButtons と JLabels には AbstractFactory を使用し、JList には SomeOtherFactory を使用します。
JButton button = AbstractFactory.getInstance().createButton();
JList list = SomeOtherFactory.getInstance.createList();
ケース 4:何か良いことはありますか? 私は何かを見落としているように感じます。