Anylogic如何编程创建自定义Resources并添加到ResourcePool
你描述的自定义类型静态资源创建、预置属性后加入资源池的需求完全可以实现,以下是通用实现方案:
核心实现思路
- 先定义自定义资源类(比如示例中的
Room),在构造函数中完成所有自定义属性初始化,提前设置好名称、容量等需要的参数 - 实现资源池的单例管理逻辑,确保全局只有一个目标资源池实例,避免重复创建
- 开发资源池的添加方法,接收自定义资源类型的实例作为入参,完成校验后存入资源池的存储结构(数组、List、Map均可,Map更方便按资源名快速查询)
代码示例(Java版本,其他语言逻辑通用)
自定义Room资源类定义
public class Room { private String roomName; private int capacity; // 构造函数支持自定义属性赋值 public Room(String roomName, int capacity) { this.roomName = roomName; this.capacity = capacity; } public String getRoomName() { return roomName; } public int getCapacity() { return capacity; } }
资源池实现
import java.util.ArrayList; import java.util.List; public class MyResourcePool { // 存储所有Room资源,也可替换为Map实现按名称查询 private final List<Room> roomList = new ArrayList<>(); // 单例模式保证全局唯一资源池 private static final MyResourcePool INSTANCE = new MyResourcePool(); private MyResourcePool() {} public static MyResourcePool getInstance() { return INSTANCE; } // 对应示例中的addTo_myResourcePool方法 public void addResource(Room room) { // 可在此处添加自定义校验规则,比如名称不允许重复、容量不能为负等 if (room != null) { roomList.add(room); } } // 扩展方法:查询所有已添加的资源 public List<Room> getAllRooms() { return new ArrayList<>(roomList); } }
调用逻辑
和你预期的写法完全一致:
public class Main { public static void main(String[] args) { Room myRoom; myRoom = new Room("redRoom", 20); MyResourcePool.getInstance().addResource(myRoom); myRoom = new Room("greenRoom", 10); MyResourcePool.getInstance().addResource(myRoom); // 验证添加结果,输出为2 System.out.println(MyResourcePool.getInstance().getAllRooms().size()); } }
注意事项
- 如果你使用的是特定框架(如Unity、Spring、游戏引擎内置资源池)的相关能力,只需要让自定义资源类继承框架要求的基础资源接口,再调用框架提供的资源池添加方法即可,核心逻辑和上述示例一致
- 资源属性自定义可以完全在构造函数中实现,也可以单独写set方法在实例化后、加入资源池前调用修改,灵活度很高
- 可以在资源池的add方法中自定义校验规则,不符合要求的资源直接拦截不加入池
内容的提问来源于stack exchange,提问作者CrustyNoodle
相关产品推荐
相关产品推荐

