我建议您使用返回封装对象的基本 OO 设计 - 它简单、强大且众所周知。
不要从工厂返回 int 并将其传递给工厂方法。相反,为新创建的对象(抽象数据类型)声明一个特定类并返回此 ADT 类的实例。将操作对象的方法从工厂移动到 ADT 类。
例如
// file Widget.java
package com.company.widgets;
public class Widget {
String widgetName;
String widgetType;
int widgetCode;
// By making the constructor "protected", can stop arbitrary classes from
// constructing and ensure on the WidgetFactory can construct
protected Widget(String widgetName,
String widgetType,
int widgetCode) {
this.widgetName = widgetName;
this.widgetType = widgetType;
this.widgetCode = widgetCode;
}
public boolean equals(Object other) {
...
}
public int hashcode() {
...
}
public void widgetOperation1(String fred) {
...
}
public String widgetOperation2(int barney ) {
...
}
}
//========================================================
// file WidgetFactory.java
package com.company.widgets;
public class WidgetFactory {
// Member attributes as needed. E.g. static Set of created Widget objects
private static Set<Widget> widgetSet;
static { widgetSet = new HashSet() }
//
public static Widget createNewWidget() {
Widget widget = new Widget();
widgetSet.add(widget);
return widget;
}
public static removeWidget(Widget widget) {
widgetSet.remove(Widget)
}
}
请注意,1000 个对象并不多,因此此解决方案将是高效的。如果你真的需要优化每一微秒的性能,你可以选择让工厂更智能,这样 Widget 不会被删除,而是被回收——例如你可以有两个 Set,widgetsInUseSet 和 widgetsRecycledSet。