2009-06-10 13 views
2

私のアプリケーションが起動すると、ログインしているユーザに基づいて正しいDALクラス(現在は4つ)のインスタンスを取得する必要があります。特定のユーザが特定のデータベースからプルダウンしています。ファクトリによって返されるオブジェクトが静的である場合、ファクトリと見なされますか?

これらのDALクラスのインスタンスをインスタンス化するのではなく、単純に正しい静的インスタンスを返すだけで、それでも "ファクトリ"パターンと見なされますか?すべてのユーザーが共有できるので、これらのオブジェクトを継続的に作成する必要はありません。

擬似コード:

public class RepositoryFactory 
{ 
    public static IRepository repoA = new FranksLumberRepo(); 
    public static IRepository repoB = new LowesHardwareRepo(); 
    public static IRepository repoC = new HackmansHardwareRepo(); 
    public static IRepository repoD = new TomsHardwareRepo(); 

    public IRepository createRepo(User currentUser) 
    { 
     switch(User.Store) 
     { 
      case FrankLumber: 
        return repoA; 
      case LowesHardware: 
        return repoB; 
      case Hackmans: 
        return repoC; 
      case TomsHardware: 
        return repoD; 
      default: 
        throw exception; 
     } 

    } 
} 

答えて

4

用語の意味がわずかに分かれています。オブジェクトは静的な参照ではありません。オブジェクトは、少なくとも1つの静的参照を持つインスタンスです。オブジェクトを返すと、そのオブジェクトへの参照だけが返されます。他の地域には静的なものがあることは知られていません。

はい、これは有効な工場パターンです。

2

これは実際には、 "抽象ファクトリー" パターンの場合になります。

+0

これは、抽象ファクトリパターンを使用できる良い例です。 –

+0

抽象ファクトリパターンのWikipediasページを読んだら、抽象ファクトリがサブファクトリ自体を返すために使用され、オブジェクトをインスタンス化するために使用されるように見えます。これは上のコードでは当てはまりません。 – mmcdole

+0

この例にはAbstractFactoryはありません。要約はどこにあり、具体的な工場はどこですか? – TimW

1

ファクトリパターンは基本的には(一般的な意味での)抽象化です。静的オブジェクトを返す場合でも、抽象レイヤーを追加しています。これは一般的にファクトリパターンの一部と見なされるべきです。

0

これはシングルトンファクトリです。

+0

+1すてきな言葉:) – Aamir

関連する問題