こんにちは、私の質問はこれです。コンバータの実装方法を定義するインタフェースがあるとします。このインタフェースは、loadDocument()メソッドと別のconvert()メソッドを持つことができます。 ConvertHTML2DOC、ConvertXML2HTML e.t.cというコンバーターを複数用意したいと考えているとします。前提条件に基づいて新しいインスタンスを作成するための最良の方法
2つの文字列に変換する必要がある2つの形式を取得したとします(どのように取得するかは関係ありません)。これで、コンバータのインスタンスを作成し、ドキュメントを変換する必要があります。
私の質問は、実際には精巧なif文を作成するか、Classクラスのリフレクションを通してクラスをロードする方が良いですか?私が意味することの少しの例を書きました。私の例では、インターフェイスを共有する2つのクラスP1とP2があります。私はまた、スピードの違いを示すためにそれらの50000を作成します。実際の呼び出しは少し速くなっていますが、最初に述べたような複雑な例では、Classメソッドを使用してクラスを作成する利点がより便利でメンテナンス性に優れていると思います。あなたの考えは?
import java.util.*;
public class Test {
public static void main(String[] args) {
try {
Random r = new Random();
Date test1start = new Date();
for (int i = 0; i<= 50000; i++){
Printable p = (Printable)Class.forName("P"+(r.nextInt(2)+1)).newInstance();
System.out.println(p.getString());
}
Date test1stop = new Date();
Date test2start = new Date();
for (int i = 0; i<= 50000; i++){
Printable p;
if (r.nextInt(2) == 0) {
p = new P1();
} else {
p = new P2();
}
System.out.println(p.getString());
}
Date test2stop = new Date();
System.out.println("Test with 'Class' invocation took "+(test1stop.getTime()-test1start.getTime())+" milliseconds.");
System.out.println("Test with 'normal' invocation took "+(test2stop.getTime()-test2start.getTime())+" milliseconds.");
} catch (Exception e) {
}
}
}
interface Printable {
public String getString();
}
class P1 implements Printable {
public String getString(){
return "1";
}
}
class P2 implements Printable {
public String getString(){
return "2";
}
}
ok ...これは好きではないのですか?あなたが投票した理由を言わないと、人々は投票から何かを学ぶことを期待していますか? – TofuBeer
OPが明確に達成しようとしている拡張性がないためでしょうか? –