我目前正在使用第三方库来管理硬件的项目中。

我希望创建一个呈现相同接口的替代库,但不是控制实际硬件,而是呈现一个不错的伪造GUI。优选地,这可以仅通过更换广口瓶来完成。

问题在于所有第三方代码都在名称空间edu.edu.wpi.first.wpilibj中,当然,我的库的名称空间将大不相同。

有什么方法可以在两个提供相同Java接口的库之间轻松切换实现吗?

最佳答案

是的,有设计模式可以做到这一点。

您可以查看策略模式。

更好的是您可以查看Dependency injection

您可以使用Google Guice作为容器,并根据您的配置,在运行时,您的实现可以在使用N个库之间进行切换。

归根结底,您需要将这些库包装成某种抽象。

这是一个例子:

interface ISomeOperation{
    void process();
}

class ThatUsesTheWPILIBJ implements ISomeOperation{

    void process(){
      //use library here
    }

}

class ThatUsesYourMock implements ISomeOperation{
    void process(){
      //use your mock here
    }
}


public YourUIClass{

    private ISomeOperation _operatingClass;


    public YourUIClass(ISomeOperation  operatingClass){

        _operatingClass = operatingClass;
    }

    public void render(){
        _operatingClass.process();
    }
}


现在,您需要做的就是接线。查看google guice配置。

10-04 15:00