Map

        只是很简单的一层封装,没实现多少功能。继IList之后的实现,若想了解有关IList的实现类ArrayList,可以进入 http://my.oschina.net/u/2011113/blog/514713 。

     结构图为

Map

    ObjectMap实现了IMap的所有接口,其代码如下:

package tunie.struct.group
{
	import tunie.struct.error.ErrorDesc;

	/**
	 * Tunie
	 * Oct 9, 2015 1:58:11 PM
	 * <b>ObjectMap主要功能如下</b>
	 * <li>对象Map,简单封装
	 */
	public class ObjectMap extends Group implements IGroup , IMap
	{
		protected var _vals:GroupVals;
		
		public function ObjectMap()
		{
			_vals = new GroupVals();
		}
		//pass
		public function put(property:String, value:*):void
		{
			if(value == null) {
				ErrorDesc.throws("插入的数据不能为空");
			}
			_vals.put(property , value);
		}
		//pass
		public function remove(property:String):*
		{
			var rmValue:* = _vals.put(property);
			if(rmValue == undefined) {
				rmValue = null;
			}
			return rmValue;
		}
		//pass
		public function removeList(propertyList:IList):IList
		{
			if(propertyList.isEmpty) return null;
			var list:IList = new ArrayList();
			for(var i:int = 0; i < propertyList.size ; i++) {
				list.add(remove(propertyList.obtain(i)));
			}
			return list;
		}
		//pass
		public function obtain(property:String):*
		{
			var value:* = _vals.obtain(property);
			if(value == undefined) {
				value = null;
			}
			return value;
		}
		//pass
		public function obtainList(propertyList:IList):IList
		{
			if(propertyList.isEmpty) return null;
			var list:IList = new ArrayList();
			for(var i:int = 0; i < propertyList.size ; i++) {
				list.add(obtain(propertyList.obtain(i)));
			}
			return list;
		}
		//pass
		public function get propertyList():IList
		{
			return _vals.propertyList;
		}
		//pass
		public function get valueList():IList
		{
			var list:IList = obtainList(propertyList);
			if(list == null) {
				list = new ArrayList();
			}
			return list;
		}
		//pass
		public function get size():int
		{
			return propertyList.size;
		}
		//pass
		override public function clear():void
		{
			_vals = new GroupVals();
		}
		//pass
		override public function contain(value:*):Boolean
		{
			if(value == null) return false;
			return valueList.contain(value);
		}
		//pass
		override public function get isEmpty():Boolean
		{
			return size == 0;
		}
		
	}
}

    代码注释很清楚,也很简洁,若有不是很明白的地方,可以回复提出。下面贴出依赖的类,部分依赖类请查看上篇文章http://my.oschina.net/u/2011113/blog/514713 。

 GroupVals

package tunie.struct.group
{
	import tunie.struct.ObjectVals;
	
	/**
	 * Tunie
	 * Oct 9, 2015 2:00:46 PM
	 * <b>ListVals主要功能如下</b>
	 * <li>1.
	 */
	public class GroupVals extends ObjectVals
	{
		public function GroupVals(obj:Object=null)
		{
			super(obj);
		}
		
		/**
		 * 取得属性列表
		 * @return 
		 */
		//pass
		public function get propertyList():IList {
			var list:IList = new ArrayList();
			for(var i:String in _obj) {
				list.add(i);
			}
			return list;
		}
	}
}

ObjectVals

package tunie.struct
{
	/**
	 * Tunie
	 * Oct 8, 2015 2:44:34 PM
	 * <b>ObjectVals主要功能如下</b>
	 * <li>对象数据,简单封装一下Object
	 */
	public class ObjectVals
	{
		protected var _obj:Object;
		public function ObjectVals(obj:Object = null) {
			_obj = obj;
			if(_obj == null) {
				_obj = {};
			}
		}
		
		/**
		 * 增删改
		 * 新增或修改一个名为property值为value的属性,若value为null,则删除名的property的这个属性,                  * 并返回原有的属性值
		 * @param property
		 * @param value
		 * @return 返回原有属性值
		 */
		public function put(property:String , value:* = null):* {
			var oriValue:* = getProp(property);
			if(value == null) {
				delProp(property);
			} else {
				setProp(property , value);
			}
			return oriValue;
		}
		/**
		 * 查
		 * 取得名为property的属性值
		 * @param property
		 * @return 
		 */
		public function obtain(property:String):* {
			return getProp(property);
		}
		
		/**
		 * @return 
		 */
		public function execute(property:String , fnParams:Array = null):CallbackResult {
			var fn:Function = getProp(property);
			return Callback.exeCallback(fn , fnParams);
		}
		/**
		 * 取得名为property的属性值
		 * @param property
		 * @return 
		 */
		protected function getProp(property:String):* {
			return _obj[property];
		}
		/**
		 * 设置名为property的属性值为value
		 * @param property
		 * @param value
		 */
		protected function setProp(property:String , value:*):void {
			_obj[property] = value;
		}
		/**
		 * 删除名为property的属性
		 * @param property
		 */
		protected function delProp(property:String):void {
			delete _obj[property];
		}
	}
}

Callback

package tunie.struct
{
	/**
	 * Tunie
	 * Oct 8, 2015 2:54:16 PM
	 * <b>Callback主要功能如下</b>
	 * <li>回调函数
	 */
	public class Callback
	{
		private var _vals:ObjectVals;
		public function Callback(fn:Function , fnParams:Array = null)
		{
			_vals = new ObjectVals();
			_vals.put("fn" , fn);
			_vals.put("fnParams" , fnParams);
		}
		/**
		 * 执行回调函数
		 * @return 
		 */
		public function execute():CallbackResult {
			return _vals.execute("fn" , _vals.obtain("fnParams"));
		}
		/**
		 * 更改回调函数的参数
		 * @return 
		 */
		public function alterParams(fnParams:Array):void {
			_vals.put("fnParams" , fnParams);
		}
		
		/**
		 * 更改回调函数参数列表中的第index个参数的值
		 * @param param
		 * @param index
		 * @return 并返回原有的参数
		 */
		public function alterParam(param:* , index:int = 0):* {
			var fnParams:Array = _vals.obtain("fnParams");
			var oriParam:* ;
			if(fnParams == null) {
				fnParams = [];
				_vals.put("fnParams" , fnParams);
				index = 0;
				oriParam = null;
			} else{
				oriParam = fnParams[index];
			}
			fnParams[index] = param;
			return oriParam;
		}
		/**
		 * 追加回调函数参数
		 * @param param
		 */
		public function appendParam(param:*):void {
			var fnParams:Array = _vals.obtain("fnParams");
			if(fnParams == null) {
				fnParams = [];
				_vals.put("fnParams" , fnParams);
			}
			fnParams.push(param);
		}
		/**
		 * 执行一个回调函数
		 * @param fn
		 * @param fnParams
		 * @return 
		 */
		public static function exeCallback(fn:Function , fnParams:Array = null):CallbackResult {
			var result:CallbackResult = new CallbackResult();
			if(fn == null) {
				result.error = "error:回调函数不能为空";
			} else {
				result.result = fn.apply(null , fnParams);
			}
			return result;
		}
	}
}

CallbackResult

package tunie.struct
{
	/**
	 * Tunie
	 * Oct 8, 2015 3:18:29 PM
	 * <b>CallbackResult主要功能如下</b>
	 * <li>回调函数执行后的结果
	 */
	public class CallbackResult
	{
		private var _vals:ObjectVals;
		public function CallbackResult()
		{
			_vals = new ObjectVals();
		}
		
		/**
		 * 执行结果异常信息
		 * @param value
		 * 
		 */
		public function set error(value:String):void {
			_vals.put("error" , value);
		}
		public function get error():String {
			return _vals.obtain("error");
		}
		
		/**
		 * 回调函数执行结果
		 * @param value
		 */
		public function set result(value:*):void {
			_vals.put("result", value);
		}
		public function get result():* {
			return _vals.obtain("result");
		}
		
	}
}

IMap

package tunie.struct.group
{
	/**
	 * Tunie
	 * Oct 9, 2015 1:47:18 PM
	 * <b>IMap主要功能如下</b>
	 * <li>限制键值为String类型
	 */
	public interface IMap extends IGroup
	{
		/**
		 * 添加或修改property的值为value
		 * @param property
		 * @param value 不能为null
		 */
		function put(property:String , value:*):void;
		/**
		 * 移除键值property
		 * @param property
		 * @return 
		 */
		function remove(property:String):*;
		/**
		 * 移除一组键值
		 * @param propertyList
		 * @return 
		 */
		function removeList(propertyList:IList):IList;
		/**
		 * 根据property取得对应的值
		 * @param property
		 * @return 
		 */
		function obtain(property:String):*;
		/**
		 * 根据一组property取得对应的值列表
		 * @param propertyList
		 * @return 
		 */
		function obtainList(propertyList:IList):IList;
		/**
		 * 键值列表
		 * @return 
		 */
		function get propertyList():IList;
		/**
		 * 值列表
		 * @return 
		 */
		function get valueList():IList;
		/**
		 * 长度
		 * @return 
		 */
		function get size():int;
	}
}


你可能感兴趣的:(as3,imap)