2012-01-24 9 views
0

だから私は、現在のインスタンスを取得する方法方法はアプリケーション1とアプリケーション2とは異なりシングルトンと静的メソッドで多形性を達成するにはどうすればいいですか?

public class ApplicationConfig{ 

     public static ApplicationConfig getCurrentInstance(){ 
      //Something similar to this 
     if(instance==null){ 
      FacesContext fc =FacesContext.getCurrentInstance(); 
      if(fc==null) 
       return null; 
      wac = FacesContextUtils.getWebApplicationContext(fc); 
     } 
     instance =(ApplicationConfig)wac.getBean("appConfig"); 
      } 
      return instance; 
     } 

    } 

を持っています。一度私は春からそれを読んで、一度私は普通のシングルトンパターンを使います。

方法はありますか?どちらの設定でもいくつかの設定が共有されます。

public boolean isConfiguredForFoo() { 
    return getCurrentInstance().getPropertyFoo().equals("foo"); 
} 

EDITので最終的に私は次のことを行うことがbasciallyできるようにしたい、またはそのような何か:ApplicationConfigは抽象的またはインタフェースである場合は、それを持つアプリケーション1はgetCurrentInstanceの実装

ApplicationConfig.getCurrentInstance().isApplication1(); 

だとそれ自身の実装でapplication2。

さらに:isConfiguredForFoo()を呼び出すと、最後にgetCurrentInstanceが呼び出されます。抽象クラスにgetCurrentInstanceの実装がなく、静的抽象メソッドを定義するのが不正であるため、この関数を呼び出すことができません。すべてのisXXXXConfigured()を一箇所にまとめ、DRY原則に従うにはどうすればいいですか?

私は、application1のapplicationConfigではjsfとspringに依存していますが、application2では依存関係はありません。これらの依存関係にアクセスする重要なgetCurrentInstance()関数を避けるだけで、Application1のApplicationConfigからほとんどの関数をどのように使用できますか?

+0

確かに、app1とapp2からparamを渡す必要がありますか? – cleverbit

+0

はい私はコンストラクタを渡しています。私はセッターゲッターを使うこともできる。 – Toskan

+0

私はそれが私のものかどうかわかりませんが、私はあなたの質問を理解していません。 – toto2

答えて

0

アーカイブする内容がわかりません。
しかし私は両方のアプリケーションが同じ方法でApplicationConfigを取得すると思われます。

  • のApp 1:と春factory-method=getCurrentInstance
  • のApp 2:手動でgetCurrentInstanceを呼び出します();
+0

これはコメントでなければなりません。答えは – ligerdave

0

は、私はあなたがやっている正確にわからないんだけど、次便利かもしれません:

public abstract class AppConfig { 

    private static AppConfig instance; 
    static { 
     if (whatever...) 
      instance = new AppConfig1(); 
     else 
      instance = new AppConfig2(); 
    } 

    public static AppConfig getInstance() { 
     return instance(); 
    } 
} 

...

if (AppConfig.getInstance() instanceof AppConfig1) 
    ... 

あなたがのためにいくつかのコードを再利用している場合時には春と時には外で設定されているかもしれませんが、どちらの場合でも異なるクラスを書き直すほうが良いかもしれません。

+0

です。問題は、私がどのアプリケーションを使用しているかを静的に判断できないことです。 AppConfigクラスは2つのプロジェクトで使用され、どちらのプロジェクトもAppConfigを使用する3番目のプロジェクトを使用します – Toskan

+0

3つのプロジェクト(3つのクラスのサブクラスではなく3つのクラス)に対して3つのAppConfigクラスを作成するだけです。彼らは内部的にいくつかの有用なクラスをメンバーとして共有することができます。私は構成上の目的で継承を使用することをお勧めしません。 – toto2

+0

ただし、すべてのプロジェクトは同じクラスで動作する必要があります。私は3つのクラスがあると言うことができます:appconfig1、appconfig2、appconfig3。プロジェクト1では、私はappconfig1を参照しています。プロジェクト2ではappconfig2を参照していますが、どちらも同じでなければなりません。これはシングルトンのアイデアです - 同じオブジェクトで作業する必要があります – Toskan

関連する問題