カプセル化されたオブジェクトを返す基本的な 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 個のオブジェクトは多くないため、このソリューションはパフォーマンスに優れていることに注意してください。マイクロ秒ごとのパフォーマンスを本当に最適化する必要がある場合は、ウィジェットを削除せずに再利用するようにファクトリをよりスマートにするオプションがあります。