如何处理许多对象共享的数据

时间:2020-08-19 10:10:44

标签: c# oop

我遇到了OOP反复出现的情况,我想知道处理它的最佳方法是什么。问题是类的数据在许多实例中都是相同的。

例如,说我想对北美的所有汽车进行道路模拟。我想要一个汽车类,可能有数百个变量来存储机械功能。这些数据中的一些对于每个汽车对象都是唯一的,例如燃料水平,温度等。其他数据在特定型号/年的所有汽车对象之间都是一致的,例如马力,扭矩,制动速度等。例如,所有2015年的本田思域将具有相同的马力(我不知道是准确的),但燃油水平却不同。

我的问题是如何处理这些共享值,并且仍然具有我的对象特定值。我的想法:

想法A:为每种型号/年份创建一种预制对象,并在每次制作汽车对象时从这些对象中复制。这样做的主要问题是内存使用效率低下。说我每年有50个与模型相关的变量,那么我有100,000个2015年的本田思域。那是5,000,000个存储的值,其中大部分是重复的,因为每个2015 Civic都精确存储了型号/年份信息。

想法B::创建某种数据库来存储每种车辆的规格,然后每个实例在数据库中只需要引用或指向其各自车辆的指针即可。我遇到的问题是,我似乎需要并行的类树,一棵用于实例数据,另一棵用于共享模型数据。

因此,我想知道在处理同一类对象之间相同的数据时,我有哪些选择?如果我的解释不清楚或认为过程奇怪,我深表歉意。

1 个答案:

答案 0 :(得分:1)

这个由四人组成的团伙提出的确切问题的模式。

次重量级:https://en.m.wikipedia.org/wiki/Flyweight_pattern

flyweight是通过与其他类似对象共享尽可能多的数据来最大程度减少内存使用的对象;当简单的重复表示将使用不可接受的内存量时,这是一种大量使用对象的方法。

甚至可以在这里找到更好的解释和示例:https://refactoring.guru/design-patterns/flyweight

相关问题