不太单身

时间:2010-07-20 14:05:48

标签: flash actionscript-3 data-access-layer

我正在使用ActionScript3为我的团队中另一位开发人员正在开发的应用程序开发数据访问层。其中一个对象,让我们称之为User是很昂贵的。每个用户都有一个唯一的ID号,因此我可以判断它们是否已经创建过,而且所有User个对象都存储在其他地方的数组中。

我希望能够限制它,以便每个ID只能有User个实例。 I.E.每个用户都必须是唯一的,对已经构建的User的请求应该会收到预先构建的User

如果我使用的是理智且设计良好的语言,我会简单地将其设为私有构造函数,并强制对象的所有请求都通过缓存事物的函数。但是flash不允许私有构造者(只有公共和内部,这两者都不起作用)。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

如果你想做私人建设者,你可以这样做:

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 :(得分:1)

您可以使用字典来存储映射到User实例的用户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;
        }
    }
}