@Override
  public Thing getThing(String thingName) {
    // 需要先从缓存中读取,否则当遍历iterator时每次都会读取新的,是否和World中的缓存重复呢?
    Thing thing = ThingCache.get(thingName);
    if (thing != null) {
      if (thing.getMetadata().isRemoved()) {
        // 如事物的文件被外部改动或事物已给标记为删除,需要重新读取
        thing = null;
      } else {
        return thing;
      }
    }

    thing = doLoadThing(thingName);
    if (thing != null) {
      for (ThingManagerListener listener : listeners) {
        listener.loaded(this, thing);
      }

      for (ThingManagerListener listener :
          World.getInstance().getThingManagerListeners(getName())) {
        listener.loaded(this, thing);
      }
    }

    return thing;
  }
  @Override
  public boolean save(Thing thing) {
    boolean removed = doSaveThing(thing);
    if (thing != null) {
      for (ThingManagerListener listener : listeners) {
        listener.saved(this, thing);
      }

      for (ThingManagerListener listener :
          World.getInstance().getThingManagerListeners(getName())) {
        listener.saved(this, thing);
      }
    }

    return removed;
  }