2010-07-20 37 views
0

我正在使用ActionScript3爲其他開發人員在我的團隊中開發的應用程序開發數據訪問層。其中一個對象,叫它User構建起來很貴。每個用戶都有一個唯一的ID號碼,以便我可以判斷它們是否曾經創建過,並且所有User對象都存儲在其他位置的數組中。不是一個Singleton

我希望能夠限制它,以便每個ID只能有User的實例。 I.E.每個用戶必須是唯一的,並且對已經構建的User的請求應該接收預構建的User

如果我使用的是一個理智的,設計良好的語言,我會簡單地將它作爲一個私有構造函數,並強制對象的所有請求都通過緩存事物的函數。但Flash不允許私人構造函數(只有公共和內部的,都不會起作用)。我怎樣才能做到這一點?

回答

2

如果你想要做的私人construtor那麼你可以這樣實現這一點:

package somepackage { 
    public class User { 
    public function User(SingletonEnforcer s):void { 
     if (s == null) 
     throw new Exception("Sorry mate!!!"); 
    } 
    public static GetUserWithId(id:String):User { 
     //user with this id exists then return it. 
     //create a new user, initialize it, cache it and return 
    } 
    } 
} 
class SingletonEnforcer { 
    //this is only visible to this class (User). 
}

1

你可以使用字典來存儲映射到用戶實例的用戶ID。通過這種方式,您可以在創建新用戶之前查看是否已有用戶。這裏有一些僞代碼:

public class UserLookup() 
{ 
    var _lookup:Dictionary = new Dictionary(); 

    function getUser(id:int):User 
    { 
     if(_lookup[id]) { 
      return _lookup[id] 
     } else { 
      var user = new User(id); 
      _lookup[ id ] = user; 
      return user; 
     } 
    } 
} 
+0

我實際上做了這個和接受的答案。我有一個創建對象的靜態函數,但它對按ID排序的靜態數組執行二分搜索。 – Malfist 2010-07-20 15:56:50