package org.zero.base;
import java.util.HashMap;
import java.util.Map;
public class DynamicObject {
private Map<String, Object> atts = null;
private Map<String, IDynamicMethod> methods = null;
private Object parent = null;
public DynamicObject(Object obj) {
super();
parent = obj;
}
public DynamicObject() {
super();
}
public void addAttribute(String name, Object value) {
if (atts == null)
atts = new HashMap<String, Object>();
atts.put(name, value);
}
public Object removeAttribute(Object key) {
if (atts == null)
return null;
return atts.remove(key);
}
public boolean hasAttribute(String name) {
if (atts == null)
return false;
return atts.containsKey(name);
}
public void clear() {
if (atts != null)
atts.clear();
if (methods != null)
methods.clear();
}
public Object getAttribute(Object key) {
if (atts == null)
return false;
return atts.get(key);
}
public Object getParent() {
return parent;
}
public void setParent(Object parent) {
this.parent = parent;
}
public void addMethod(String name, IDynamicMethod method) {
if (methods == null)
methods = new HashMap<String, IDynamicMethod>();
methods.put(name, method);
}
public void removeMethod(String name) {
if (methods != null)
methods.remove(name);
}
public boolean hasMethod(String name) {
return methods.containsKey(name);
}
public void invoke(String methodName, Object... args) {
if (methods != null)
methods.get(methodName).execute(this, args);
}
public Map<String, IDynamicMethod> getAppendMehods() {
return methods;
}
public Map<String, Object> getAppendAtts() {
return atts;
}
public static interface IDynamicMethod {
public void execute(DynamicObject obj, Object... args);
}
public static void main(String[] args) {
DynamicObject o = new DynamicObject();
o.addAttribute("name", "hwp");
o.addMethod("move", new IDynamicMethod() {
@Override
public void execute(DynamicObject obj, Object... args) {
System.out.println("动态添加的方法被执行。。。");
}
});
if (o.hasMethod("move"))
o.invoke("move");
if (o.hasAttribute("name"))
System.out.println(o.getAttribute("name"));
}
}