2017-06-16 51 views
-2

我試圖找出一種方法將同一個類的一個實例傳遞給多個類,以便能夠構建一個對象。問題是它不能是靜態的或使用單例,因爲許多用戶將同時觸碰應用程序,而我可能遇到其他問題。是否有任何設計模式可以在這種情況下最好地工作,或者有什麼方法可以在java中使用全局變量?我正在嘗試用現有的休息服務來實現這一點,但設計得不是很好。將對象的一個​​實例傳遞給不同的類而不使用靜態或單例

public class OneInstanceOf 
    {//I want to build this map object without static 
    private Map<String, String> mapIwantToBuild = new HaspMap<String, String>(); 
    public void methodIwantToCall(String name, String value) 
    {mapIwantToBuild.put(name, value) 
    } 
+1

請通過顯示您的[mcve]代碼並以更具體和實際的代碼解釋問題,使您的問題更加具體和具體。 –

+0

在其構造函數中將實例A(類A)傳遞給實例B(類B)。是的,你可以使用像Guice或Spring這樣的DI框架來控制這些類內依賴關係。 –

+0

我猜你正在創建一個M-V-C(模型 - 視圖 - 控制器)結構或其多種變體之一,但沒有更多信息,我無法將這個猜測作爲答案發布。 –

回答

-2

U可以創建類的實例變量的參數制定者,在你想通過實例的每個類。然後在一個調用所有這些類的setter的類中創建一個方法,並將參數實例作爲參數傳遞給該方法。 像下面一樣。

class A{ 
    B b = new B; 
    set(B b){ 
     C.setB(b); 
     D.setB(b); 
     E.setB(b); 
    } 
} 
0

你的任務的常見模式是依賴注入。你可以使用spring框架來完成這個任務。

1.創建配置與豆:

@Configuration  
public class YourConfiguration { 
    @Bean 
    public OneInstanceOf oneInstanceOf { 
     return new OneInstanceOf(); 
    } 
} 

2.Inject你的bean任何你想要的(簡單 - 使用自動裝配):

@Component 
public class Client1 { 
    @Autowire 
    private OneInstanceOf oneInstanceOf; 

    public void someMethod() { 
     oneInstanceOf.methodIwantToCall(); 
    } 
} 

Spring將確保oneInstanceOf的單個實例會注入所有客戶。

+0

也許我失去了一些東西,但試圖引用該客戶端1中的bean,它是空的...(春季啓動應用程序) – tobes

+0

您是否將您的配置類添加到主應用程序類? @Import({YourConfiguration.class1}) – alexey28

相關問題