0

我在我的应用程序中执行了一些测试,但在此之前我必须初始化我的响应信息(执行目录、使用的资源等)。

在特定点之后,我将能够识别我将要执行的测试类型,所以现在我必须有一个适当的响应实例,但这迫使我手动将字段从旧对象复制到新对象,这会导致错误当事情发生变化时。

例如,假设我有以下类:

class BaseResponse{
    private int port;
    private int trials;
    protected BaseResponse(BaseResponse response){
        this.port = response.port;
        this.trials = response.port;
    }
}
class TcpResponse extends BaseResponse{
    public TcpResponse(BaseResponse response){
        super(response);
    }
    private int tcpSpecificMetric;
}

所以一开始我初始化了这个BaseResponse类,把它填满,然后当我发现我要运行一个 TCP 测试时,我必须初始化一个新的TcpResponse

有人会为此提出一个好的设计建议吗?提前致谢。

4

1 回答 1

1

编写一个工厂(又名虚拟构造函数)或构建器,它知道如何BaseResponse根据传递给它的参数创建不同类型的。

public class BaseResponseFactory {
    private static BaseResponseFactory INSTANCE = new BaseResponseFactory();

    private BaseResponseFactory() {}

    public static BaseResponseFactory getInstance() { return INSTANCE; }

    public BaseResponse create(int port, int trials) { return new BaseResponse(port, trials); }

    public BaseResponse create(int port, int trials, int tcpMetric) { return new TcpResponse(port, trials, tcpMetric); }
}
于 2012-07-04T12:58:31.757 回答