我正在使用ActionScript3为我的团队中另一位开发人员正在开发的应用程序开发数据访问层。其中一个对象,让我们称之为User
是很昂贵的。每个用户都有一个唯一的ID号,因此我可以判断它们是否已经创建过,而且所有User
个对象都存储在其他地方的数组中。
我希望能够限制它,以便每个ID只能有User
个实例。 I.E.每个用户都必须是唯一的,对已经构建的User
的请求应该会收到预先构建的User
。
如果我使用的是理智且设计良好的语言,我会简单地将其设为私有构造函数,并强制对象的所有请求都通过缓存事物的函数。但是flash不允许私有构造者(只有公共和内部,这两者都不起作用)。我怎样才能做到这一点?
答案 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;
}
}
}