我正面临着这种脱钩问题。让我用例子解释一下:
假设我有不同的类使用一些JAR。现在这个JAR不断更新,我们还需要更新我们的系统。现在,如果这个JAR略有变化,我必须对每个类进行更改,所以我们决定将它解耦。但是这些类以这样的方式调用JAR类,即它们创建它的对象,设置一些标志并在此基础上得到结果。因此,每个对象在每种方法中都有其重要性。
让我用简单的例子解释一下。
说我有一个X级
class X {
Base base;
public int getCalResult(int a, int b) {
base = new Base();
base.setA(a);
base.setB(b);
return base.getResult();
}
public int getCalResult2(int a, int b, int c) {
base = new Base();
base.setA(a);
base.setB(b);
base.setC(c);
return base.getResult();
}
}
class Base { This is some legacy class inside JAR so can't change this
int a, b, c, d;
public setA(int a) {
this.a = a;
}
public getResult() {
return a + b + c + d;
}
}
如何解耦这种结构并使其同时保持线程安全。有什么指针吗?任何设计模式?
我希望所有对JAR的调用都必须保存在一个类中,这样如果JAR中有更改,我只需要处理单个类而不是所有它们
我做的是
引入BaseProxy
public class BaseProxy {
Base b;
public static newInstance() {
b = new Base();
}
public static setABCD(int a, int b) {
b.setA(a);
b.setB(b);
}
}
class X {
public int getCalResult(int a, int b) {
BaseProxy.newInstance();
BaseProxy.setAB(a,b);
return BaseProxy.getResult();
}
public int getCalResult2(int a, int b, int c) {
BaseProxy.newInstance();
BaseProxy.setABC(a,b,c);
return BaseProxy.getResult();
}
}
这可以在单线程env中工作,但不能在mutli中工作。我需要就此提出建议。任何其他更好的设计,我相信有。
答案 0 :(得分:1)
很少有事情不清楚(或不理想) 1.当你说,jar中的遗留类得到更新时,是否会更改现有原型或添加新功能?如果他们不断更新定义,那么你就麻烦了。
要解决这个问题,一种方法是从遗留类中提取接口并定义实现它的委托(将其置于调用代码之外)并使用它在调用代码以减少直接依赖。现在,你的代表应该与传统课程进行对话。
此外,每当您的遗留类发生更改时,只需要更新代理端(除非被调用函数完全转换)