簡體   English   中英

Java線程環境中的解耦

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM