如何在实例集合的情况下通过其类类型或接口替换实例



我有很多类,它们都派生自类AbstractVariable。我需要将它们收集到相应的列表中,因为我需要使用它们。将它们收集到一个列表中,然后按 getter 的实例过滤它们可能更简单,但我不确定性能。

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);
}

}

其中一些是类,其中一些是装饰器接口。访问者似乎有点矫枉过正,因为它必须在包括子类在内的所有类中声明,并且考虑到一个类可能有多个接口,维护将是可怕的。

这不是类或接口的最终列表。它会变得更大。

现在我真的在考虑 getter 过滤,因为这个选择只是在算法的最开始。

问题是 - 在这件事上最好的设计选择是什么?游客?吸气剂过滤?维护不同的列表?还是其他一些设计模式?

在Google上查看访问者模式设计,作为一些介绍性解释,您需要在AbstractVariable类中创建一个accept(Visitor(方法,该方法接收访问者实例并执行visitor.visit(this(。然后在 Visitor 类中,您创建与 AbstarctVariable 存在的子类一样多的方法,每个方法都应该称为 visit(SubclassX(,SubclassX 将是每个 AbstractVariable 子类。最后 visit(SubclassX( 方法需要在 AbstractVariable 上调用一个 addSublassX(SubclassX(,这个方法应该负责将 SubclassX 的实例添加到相应的 List 中。

相关内容

  • 没有找到相关文章

最新更新