我有一个用 C++ 编写的库,它提供了一个图形编程语言的虚拟机(“VM”)。它使用图像(例如 png 文件)作为其源代码并执行指令。VM 用于不同类型的应用程序(控制台、gui),因此 lib 的目标是尽可能灵活。
问题是:VM和图像对象之间应该是什么关系?应该是聚合(VM 构造函数将现有 Image 实例作为参数)还是组合(VM 构造函数将图像文件路径作为字符串参数)?
合成是没有内部对象(图像)就不能存在外部(VM)对象的地方。好吧,在这种情况下,一个VM可以存在,但是没有任何图像它是没有用的(如果没有代码就不能执行任何指令)。所以它应该接受字符串参数并自行创建和销毁图像对象。但是如何验证字符串文件路径(检查是否没有图像或文件不是图像或图像二进制文件已损坏) - 应该在哪里实施此验证?虚拟机构造函数,我猜?
另一方面,如果 VM 可以用另一个图像替换一个图像,它可能是聚合(更像是 Java 虚拟机)。但我不确定这是否是一个好方法——VM 必须重置所有图像指针和绑定到图像的数据堆栈。也许每个映像一个 VM 是一种更清洁、更合乎逻辑的解决方案。
在这种情况下你会选择聚合还是组合?感谢您的回答。