gpt4 book ai didi

java - 动态方法调度

转载 作者:行者123 更新时间:2023-11-29 05:31:42 25 4
gpt4 key购买 nike

Dynamic dispatch 网上有很多资料,我自己都实现不了,感觉很鸡肋。请帮我。这就是我想要做的。

ClassA{

public void createReq(){
}

public String postReq(){
}

}

ClassB{

@Test
public void myTest(){
Class A = new ClassA();
a.createReq();
String test = a.getResponse();

/* Not sure how do i do this part */

}

所以,我在 myTest 方法中得到一个字符串 'test' 。我想创建一个扩展 ClassBClassC 并编写一个方法来验证 myTest 中返回的字符串( a.getResponse()).

如果没有实现ClassC,我只想简单地结束测试。如果只有 ClassC 存在并实现了验证方法,我希望完成验证。

我该怎么做?请帮忙。谢谢。

最佳答案

您可以创建一个Dispatcher 接口(interface),它只定义一个方法dispatch(String)(或您尝试实现的任何方法)。基类 (ClassB) 使用 NullPattern 实现接口(interface),而子类 (ClassC) 根据您的需要实现接口(interface)。

界面非常简单:

public interface Dispatcher
{
public void dispatch(String message);
}

NullPattern 是这样实现的:

public class NullDispatcher implements Dispatcher
{
public void dispatch(String message)
{
// do nothing
}
}

ClassB 应该这样修改:

public class ClassB
{
private Dispatcher dispatcher;

public ClassB()
{
dispatcher = new NullDispatcher();
}

public void setDispatcher(Dispatcher dispatcher)
{
// change this to your needs
if (dispatcher == null)
dispatcher = new NullDispatcher();
else
this.dispatcher = dispatcher;
}

@Test
public void myTest()
{
ClassA a = new ClassA();
a.createRequest();
String test = a.getResponse();

dispatcher.dispatch(test);
}
}

这里可以使用 setDispatcher(Dispatcher) 方法设置一个新的 Dispatcher。此调度程序将在 myTest 中用于调度 a.getResponse() 的结果。

扩展类只需要设置Dispatcher的具体实现即可。 F.e.要将响应打印到控制台,您可以像这样实现 ConsoleDispatcher:

public class ConsoleDispatcher implements Dispatcher
{
public void dispatch(String message)
{
System.out.println(message);
}
}

要在 ClassC 中使用 ConsoleDispatcher 而不是 NullDispatcher,您可以使用类似于以下的代码:

public class ClassC extends ClassB
{
public ClassC()
{
this.setDispatcher(new ConsoleDispatcher());
}
}

由于 ClassC 扩展了 ClassB,您将有权访问 myTest,它使用定义的调度程序相应地调度消息。

HTH

关于java - 动态方法调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20857658/

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