gpt4 book ai didi

java - 在这种情况下,我应该使用什么模式/解决方案来避免 `instanceof` ?

转载 作者:行者123 更新时间:2023-11-30 04:00:52 26 4
gpt4 key购买 nike

在这种情况下我应该使用什么模式/解决方案来避免 instanceof?我用谷歌搜索了一下,发现访问者模式是可行的方法,但我认为这不适用于这种情况。还有其他解决方案,例如以黑客解决方案的形式将 isTestable() 方法添加到短语中,我正在寻找一种标准的方法。

    public class PhraseOwner(){
List<Phrase> phrases;
public void switchTestMode(){
for(Phrase phrase : phrases){
if(phrase instanceof Testable())
(Testable)phrase.switchTestMode();
}

}
}

public interface Phrase{
//STUFF
}

public interface Testable{
public void switchTestMode();
}

我有两种类型的类,一种是仅实现了 Phrase 接口(interface)的类,另一种是同时实现了 PhraseTestable 接口(interface)的类。

public class A implements Phrase,Testable{
public void switchTestMode(){
//stuff
}
}

public class B implements Phrase{
//stuff
}
}

最佳答案

访问者对不同或相同层次的对象收集相同类型的操作。
就您而言,事实并非如此,因为其中一个对象错过了测试的概念。

Phrase不是Testable (或相反),我不会做 List<Phrase>类型。
不要将苹果与橙子混合。集合泛型的发明主要是为了避免这种情况。

你必须通过辨别 List<Phrase> 重新考虑你的代码设计来自List<Testable> ,或者通过构建分层链接来改进多态性(如果链接确实存在)。

关于java - 在这种情况下,我应该使用什么模式/解决方案来避免 `instanceof` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22007128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com