0

だから私は今プログラムを書いていて、それをどのようにプログラムすべきかについて葛藤しています。2 つのオプションがあります。

public class Translator {

private Translator(){}; //prevents instantation
/****
  ***Stuff
  ***/

public static String translate(String oldLanguage, String newLanguage, String text){
         //METHOD Code
}

}

また

public class Translator {

private String oldLanguage;
private String newLanguage;

public Translator(String oldLanguage, String newLanguage){
            this.oldLanguage = oldLanguage;
            this.newLanguage = newLanguage;
}; 
/****
  ***Stuff
  ***/

public String translate(String text){
         //METHOD Code
}

}

どちらを使用する必要があり、その理由は? これが私のプログラムの API エンドになります。

また、プログラマーとして、API を扱う際にどちらが便利だと思いますか?その理由は?

4

5 に答える 5

1

私はトランスレータのステートレス バージョンを使用したいと考えていますが、トランスレート済みのステートフル バージョンを使用したいと考えています。その理由は、状態を取り除くと、多くの場合、重要な情報の一部を実際に使用される場所に近づけながら、同期バグのクラス全体を取り除くことができるからです。たとえば、2 つの言語変数が 1000 行のクラスの一部であるとします。それらが使用されるたびに、それらがどのように設定されているかを調べたいですか?

私が翻訳済みの状態が好きな理由は、一般的な翻訳者は、どの言語で使用されるかを知らなくても存在できるのに対し、翻訳済みで使用されている言語を失うと、それをどうするかがわからないからです。 (数学の問題で単位を失うのと似ています)。

ステートフル オプションの場合、私が気に入っているバージョンは次の代わりです。

   ...
   private String oldLanguage;
   private String newLanguage;

使用する:

   ...
   private final String oldLanguage;
   private final String newLanguage;

...そして、次のようなものの代わりに:

   myTranslator.setLanguages("spanish", "english")
   Translated myTranslated = myTranslator.translate(original)

あなたが使用することができます:

   Translator spanishEnglish = new Translator("spanish", "english")
   Translated myTranslated = spanishEnglish.translate(original)
于 2013-11-10T19:57:38.300 に答える
0

最初のものを使用することをお勧めします

public class Translator {

    private Translator(){}; //prevents instantation
        /****
        ***Stuff
        ***/

    public static String translate(String oldLanguage, String newLanguage, String text){
             //METHOD Code
    }

}

なぜ ?直接できるのに、何かを翻訳するためにオブジェクトをインスタンス化する必要があるのはなぜですか。

Translator.translate(S,S,S);
于 2013-11-10T17:44:18.973 に答える