我有很多类,它们都派生自 AbstractVariable 类。我需要将它们收集到相应的列表中,因为我需要使用它们。将它们收集到一个列表中然后由 getter 通过 instanceof 过滤它们可能更简单,但是我不确定性能。
public class VariableRecorder {
private static List<Beacon> beacons = new LinkedList<>();
private static List<Engineer> engineers = new LinkedList<>();
private static List<Heli> helis = new LinkedList<>();
private static List<Locatable> locatables = new LinkedList<>();
private static List<Location> locations = new LinkedList<>();
public static void record(AbstractVariable av) {
if(av instanceof Engineer)
engineers.add((Engineer) av);
if(av instanceof Heli)
helis.add((Heli) av);
if(av instanceof Locatable)
locatables.add((Locatable) av);
if(av instanceof Location)
locations.add((Location) av);
if(av instanceof Beacon)
beacons.add((Beacon) av);
}
}
其中一些是类,其中一些是装饰器接口。访问者似乎是一种过度杀伤,因为它必须在包括子类在内的所有类中声明,并且考虑到一个类可能有多个接口,维护将是可怕的。
这不是类和接口的最终列表。它会变得更大。
现在我真的在考虑吸气剂过滤,因为这个选择只是在算法的最开始。
问题是——在这个问题上最好的设计选择是什么?游客?吸气剂过滤?维护不同的列表?还是其他一些设计模式?