2010-12-14 13 views
3

これは、私がGoogleで詳しく知ることができなかったレガシーコードの別のデザインパターンです。この場合、子クラスは、その抽象親を拡張したが、その後、右周りに回転し、親の静的インスタンスを宣言:子クラスが親クラスの静的インスタンスメンバーを宣言するのはいつ、そしてなぜですか?

public abstract class MessageBase { 
    protected DAOFactory factory; 
    // method declarations 
} 

public class EDWMessage extends MessageBase { 
    private static MessageBase instance; 

    public static MessageBase getInstance(Properties properties) { 
     if (instance == null) { 
      instance = new EDWMessageTransaction(properties, null); 
     } 
     return instance; 
    } 
//more code 
} 

私はそれがある場合(このデザインパターンを駆動だろうか理解していないが既知のパターン)。これは、親の各メンバ変数を静的なものとして宣言するのを避けるための一種の便利なパターンですか?あるいは、複数の子クラスがそれぞれ親のインスタンスを1つ持つようにすることを意味します。しかし、そうであれば、なぜ単純な構成以上に継承を過剰に使用するのでしょうか?

コードの残りの部分は、なぜこのように行われるのかを示すものではありません。どんな考えやアイデアも高く評価されます。ありがとう!

P.S.私はどのように対処するのか分からないこのレガシーコードで、面白い多くの部分を実行しているようです。designpatternsすでに私を助けてくれた皆様に感謝します。

編集:コードサンプルを展開します。実際にこのコードを使用する場所を発見すると、もう一度編集します。はい、ドキュメントはありません。

+1

インスタンス変数はどのように使用されますか? – Ralph

答えて

3

これは、スレッドセーフな遅延シングルトン初期化の共通の慣例です。シングルトンクラスを使用できる場合は、プライベート静的インスタンス化クラスに委譲します。これはあなたの子クラスが使用されている方法ですが、これはその親

+0

+1:この説明は、例文の継承ではなく、合成を使用していることを除いて、ある意味があります。私はそれが推論を無効にしないと仮定します。私が含まれているサンプルコードを拡張して、それが答えを変えるかどうかを見てみましょう。ありがとう! – Riggy

0

の静的インスタンスを保持している子クラスのためのユースケースであるかどう

public class MySingleton{ 

    private MySingleton(){ 

    } 

    public static MySingleton getInstance(){ 
     return SingletonCreator.INSTANCE; 
    } 

    private static class SingletonCreator{ 
    private static final MySingleton INSTNACE = new MySingleton(); 
    } 
} 

わからない本来の目的はおそらくだったそのそれぞれについて、 MessageBaseのサブクラスでは、唯一の1つのインスタンス、あなたはあなたがすべてのメッセージタイプを反復処理し、各

私2centsのインスタンスを取得することができ、基本クラスでcommom方法で

をそのインスタンスにアクセスできることがあるはず

関連する問題