代码之家  ›  专栏  ›  技术社区  ›  Malfist

不是很单身

  •  0
  • Malfist  · 技术社区  · 15 年前

    我正在使用ActionScript3为我的团队中另一个开发人员正在开发的应用程序开发数据访问层。其中一个对象,我们称之为 User 建造成本很高。每个用户都有一个唯一的ID号,这样我就可以知道他们以前是否创建过,以及 用户 对象存储在另一个数组中。

    我希望能够限制它,以便只有一个 用户 每个ID,即每个用户必须是唯一的,并且请求已经构造的 用户 应接收预制的 用户 .

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

    2 回复  |  直到 15 年前
        1
  •  2
  •   bhups    15 年前

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

    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).
    }
        2
  •  1
  •   JeremyFromEarth    15 年前

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