有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何避免在这种“访问者”模式中使用instanceof?

有多种控制器类型实现零、一个或多个接口,如可更新和可发布

public class Controller {
    private void doSomeProcessing() {
        //do some processing
    }
}
public class ArticleController extends Controller implements Publishable {
    public void publish() {
        this.doSomeProcessing();
        //TODO: actually publish article
    }
}
public class HeadlineController extends Controller implements Publishable, Updateable {
    public void publish() {
        this.doSomeProcessing();
        //TODO: actually publish headline
    }
    public void update() {
        this.doSomeProcessing();
        //TODO: actually update headline
    }
}

这些接口实现中的某些任务可能包含许多或所有控制器类型所共有的代码,但也可能包含该控制器类型所特有的一些代码。与其在所有可更新(重复代码)的实现中都使用doSomeProcessing(),还可以使用名为Visitor(可能不正确)的单例监管者来执行所有更新,并调用控制器的更新

public void update(Controller c) {
    if (c instanceof Updateable) {
        c.doSomeProcessing();
        ((Updateable)c).update(); //updateable code specific to this controller
    }
}

避免instanceof需要类强制转换,这也是不好的:

public void update(Updateable c) {
        ((Controller)c).doSomeProcessing();
        c.update(); //updateable code specific to this controller
}

请注意,在本例中,instanceof并不像instanceof的大多数“坏”用法那样“坏”。这是因为与switch语句不同,只需进行一次检查,以确定执行该方法是否合法。不过,这似乎是错误的。有什么想法吗


共 (0) 个答案