对于这种情况,什么可能是一个好的设计模式?

时间:2012-07-04 12:56:23

标签: design-patterns

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

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

例如,假设我有以下类:

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

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

1 个答案:

答案 0 :(得分: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); }
}