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

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;
}
}
原文:http://my.oschina.net/u/2011113/blog/514791