2009-06-10 11 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

對您的術語稍作澄清。對象不僅僅是引用。對象是至少有一個靜態引用的實例。當你返回對象時,你只是返回對該對象的引用。它不知道在其他一些領域有靜態的存在。

但是,這是一個有效的工廠模式。

2

這將是一個 「抽象工廠」 模式的情況下,實際上。

+0

這是一個很好的例子,你可以使用抽象工廠模式。 – 2009-06-10 03:09:58

+0

在閱讀Abstract Factory Pattern的Wikipedias頁面之後,它看起來像一個Abstract Factory用於返回一個子工廠本身,然後可以用它來實例化對象。上面的代碼並非如此,對吧? – mmcdole 2009-06-10 03:22:46

1

工廠模式本質上是一種抽象(一般意義上的術語)。即使您返回靜態對象,您仍然會添加一個抽象層,這很好,應該將其視爲工廠模式的一部分。

0

這將是一個單身工廠。