我使用 java 库,core
负责AbstractFactory
UI 组件。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 中添加,因为我无法修改核心库。
我该怎么办?
案例一:
总是MyFactory.getMyFactoryInstance()
在 MyApplication 中调用,新的静态字段。
class MyFactory extends AbstractFactory {
private static MyFactory myInstance = new MyFactory();
public static getMyFactoryInstance() { return myInstance }
...
}
案例二:
总是MyFactory.getMyFactoryInstance()
在 MyApplication 中调用,使用 cast
class MyFactory extends AbstractFactory {
public static MyFactory getMyFactoryInstance() {
if (getInstance() instanceOf MyFactory) {
return (MyFactory) getInstance();
}
throw Exception();
}
...
}
案例三: 使用两个工厂。对于 JButton 和 JLabels,使用 AbstractFactory,对于 JList,使用 SomeOtherFactory。
JButton button = AbstractFactory.getInstance().createButton();
JList list = SomeOtherFactory.getInstance.createList();
案例四:更好的东西?我觉得我忽略了一些东西。