-4

Java アプリケーションにファクトリがあります。次のようになります。

// Common Interface
 interface Currency {
   String getSymbol();
  }

// Concrete Rupee Class code
class Rupee implements Currency {
       @Override
       public String getSymbol() {
              return "Rs";
       }
}

// Concrete SGD class Code
class SGDDollar implements Currency {
       @Override
       public String getSymbol() {
              return "SGD";
       }
}


// Concrete US Dollar code
class USDollar implements Currency {
       @Override
       public String getSymbol() {
              return "USD";
       }
}

そして、私はFactoryClassを持っています:

class CurrencyFactory {

       public static Currency createCurrency (String country) {
       if (country. equalsIgnoreCase ("India")){
              return new Rupee();
       }else if(country. equalsIgnoreCase ("Singapore")){
              return new SGDDollar();
       }else if(country. equalsIgnoreCase ("US")){
              return new USDollar();
        }
       throw new IllegalArgumentException("No such currency");
       }
}

たとえば、国の文字列が「インド」の場合、ルピーが返されます。国文字列が「すべて」の場合、すべてのオブジェクトをルピー、sgddollars、および米ドルとして返すように実装する必要があります。そのようなことの例はありますか?

4

2 に答える 2

3

a を使っMapて調べてみませんか?派手にするためだけにパターンを使用する必要はありません。特定の状況では、コードが乱雑になるだけです。

于 2012-11-06T17:12:54.283 に答える
0

このようなことを試してください

クラスを AllCurrency として作成する

 public class AllCurrency implements Currency{

private Rupee rupee;
private SGDDollar sgdDollar;
private USDollar useDoler;

public AllCurrency (Rupee rupee,SGDDollar sgDoler,USDollar usDoller){
    this.rupee = rupee;
    this.sgdDollar = sgDoler;
    this.usDoller = usDoller
}

@Override
   public String getSymbol() {
          return "all";
   }

// add getters and setters

}

そしてあなたの工場

public static Currency createCurrency (String country) {
   if (country. equalsIgnoreCase ("India")){
          return new Rupee();
   }else if(country. equalsIgnoreCase ("Singapore")){
          return new SGDDollar();
   }else if(country. equalsIgnoreCase ("US")){
          return new USDollar();
    }else if(country. equalsIgnoreCase ("all")){
          return new AllCurency(new Rupee(),new SGDDollar(),new USDollar());
    }
   throw new IllegalArgumentException("No such currency");
   }
于 2012-11-06T17:23:45.690 に答える