2010-07-20 57 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