は、私は完全に確認することはできませんが、あなたが指定されたオブジェクトの多くのインスタンスの作成に関連するパフォーマンスの問題についてはあまり心配していることが表示されます。
IMHO最初にデザインについて心配する必要があります。後でそのようなことが問題になる場合は、後でパフォーマンスについて心配する必要があります。正直なところ、あなたのクラスは、ヒープで何百万ものオブジェクトを泳ぐようなクラスのようには見えません。
インターフェイスはSAMタイプ(単一の抽象メソッド)と呼ばれます。 JDK自体にはたくさんの例があります。たとえば、java.util.Comparatorとjava.lang.Comparableが良い例です。
メソッドを静的に定義する場合は、デザインに基づいている必要がありますが、その機能の機能やシンプルさではありません。あなたは他の誰よりもあなたのデザインをよく知っているかもしれません。このフォーラムの開発者はあなたの良いアイデアやあなたの現在のアイディアに挑戦して、あなたがすでに持っているものを改善するのに役立つでしょう。
あなたが言及しているsinglentonパターンは、指定されたクラスのインスタンスをあらかじめ定義した数以上作成しないように意図しています。最も一般的には、それらを1つのインスタンスに制限します。なぜあなたのデザインでそのようなことをしたいのかは明らかではありませんが、インスタンスの数に関係するパフォーマンスについての心配はここでの最善の理由のようには聞こえません。あなたはおそらくあなたができるstatic factory methodクラスを持つ、電卓の種類を持っていることを計画している場合
あなたの設計を簡素化する方法を探して、あなたは、代わりにあなたのインターフェースのクラスの実装を提供する、インライン匿名内部クラスを使用するようなことがありすべてのSAMタイプの実装を置く:
public class Calculators {
public static BinaryCalculator getBasicCalculator(){
return new BinaryCalculator() {
@Override
public double addition(double numb1, double numb2) {
return numb1 + numb2;
}
};
}
public static BinaryCalculator getSofisticatedCalculator(){
return new BinaryCalculator() {
@Override
public double addition(double numb1, double numb2) {
//do any other sofisticated calculation
return numb1 + numb2;
}
};
}
}
次に、あなたは、単に行うことができます:あなたが実験を許可されている場合
public static void main(String[] args) {
BinaryCalculator simple = Calculators.getBasicCalculator();
BinaryCalculator complex = Calculators.getSofisticatedCalculator();
double result;
result = simple.addition(10,11);
result = complex.addition(10,11);
}
をまた、あなたはにそれを試してみるようなことがありここでは、電卓の実装をlamdbaの式で書くことができます。例えば
BinaryCalculator simple = (num1, num2) -> num1 + num2;
、さらには、インライン方式では、
public class Pair {
private final double a;
private final double b;
public Pair(double a, double b){
this.a = a;
this.b = b;
}
public double calculateWith(BinaryCalculator calculator){
return calculator.addition(a,b);
}
}
は、その後、あなたはこのようなあなたのSAMタイプのためのラムダの実装を提供し、簡単なこともできます、これは当然のことながら
Pair p = new Pair(10,11);
double result = p.calculateWith((num1, num2) -> num1 + num2);
System.out.println(result);
ですJDK 8のプレビューだけですが、最新の機能を試すことができれば、それは本当にクールな解決策です:-)
クラスのメモリフットプリントはJVMに依存します。 –