[英]Decoupling in threaded environment java
我正面臨這個解耦問題。 讓我用示例解釋一下:
說我有使用一些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();
}
}
這本來可以在單線程環境中工作,但不能在多線程環境中工作。 我需要這個建議。 任何其他更好的設計,我敢肯定有。
幾件不清楚(或不理想)的事情1.當您說jar中的舊類得到更新時,它會改變現有的原型還是增加新的功能? 如果他們不斷更新定義,那么您將遇到麻煩。
為了解決這個問題 ,一種方法是從舊類中提取一個接口,並定義一個實現它的委托 (將其放置在調用代碼之外),並在調用代碼中使用它來減少直接依賴。 現在,您的代表應與舊班交談。
另外,只要您的舊類發生更改,就只需要更新它的委托方(除非被調用函數中有完整的轉換)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.