2014-07-11 2 views
1

응용 프로그램에서 사용되는 라이브러리 (Maven 아티팩트)로 작업하고 있습니다. 현재 상황에서는 라이브러리가 정적 클래스를 사용하여 작업 할 수 있습니다. 따라서이 라이브러리에서는 "하나의 인스턴스"작업 모드 만 허용됩니다. 작업을 시작할 때 Configuration 개체를이 주 클래스에 제공해야합니다. 이 구성 객체의 MainClass.start(new Configuration()) 및 이후 버전은 싱글 톤 팩토리를 통해 다른 클래스에서 액세스합니다.싱글 톤을 사용하지 않는 클래스간에 데이터를 공유하는 방법

내 문제는 현재 다중 인스턴스 모드를 허용해야하는 방식으로 라이브러리를 변경해야한다는 것입니다. 따라서 MainClass에는 더 이상 정적 메서드가 없으므로 인스턴스화해야합니다. 내가 비틀 거리는 것은 다른 클래스의 인스턴스 (MainClass의 현재 인스턴스와 함께 사용되는 인스턴스)가 MainClass의 인스턴스에 직접 액세스 할 수없는 방식으로 각 인스턴스에 고유 한 Configuration을 제공하는 방법입니다. 물론이 시나리오에서는 두 개 이상의 MainClass 인스턴스가 각각의 구성을 가져야하기 때문에 Singleton은 해결책이 아닙니다.

+0

MainClass를 인스턴스화하면 다른 인스턴스를 인스턴스화하거나 매개 변수로 구성을 전달할 수 있다고 생각합니다. –

+0

@HankLapidez 어쩌면 제가 질문을 좀 더 확장해야합니다 - 예, 일부 객체는 MainClass 생성자 내에서 인스턴스화 될 수 있지만 일부는 인스턴스화됩니다. 특정 이벤트에만 해당되며 MainClass에서는 인스턴스화되지 않지만 다른 클래스에서는 인스턴스화되지 않습니다. 그것은 내가 고려하고있는 백업 방법이지만 Configuration 오브젝트를 도처에 통과시키는 순수한 통증 일 것이다. 그러나 나는 그것을 다루는 다른 (어쩌면 더 쉽거나 더 적절한) 방법을 찾고있다. – AlexKey

답변

0
class Configuration{ 
String a; 
String b; 

public Configuration(String a, String b){ 
    this.a = a; 
    this.b = b; 
} 

public String getA(){ 
    return a; 
} 

public String getB(){ 
    return b; 
} 

} 


class MainClassFactory{ 
private final static MainClassFactory INSTANCE = new MainClassFactory(); 
private ConcurrentHashMap<String,MainClass> mainClassMap = new ConcurrentHashMap<String,MainClass>(); 
public static getInstance(){ 
    return INSTANCE; 
} 

public MainClass getMainClass(Configuration config){ 
    String key = config.getA() +","+ config.getB(); 
    MainClass mainClass = mainClassMap.get(key); 
    if(mainClass == null){ 
    mainClass = new MainClass(config); 
    mainClassMap.put(key,mainClass); 
    } 
    return mainClass; 
} 

} 

도움이 될까요?

는 "동일한"구성하여 동일한 MainClass을 얻을 수있을 것입니다 다음 MainClassFactory.getInstance().getMainClass(config)를 호출하여 ConfigurationMainClass 인스턴스화 가정

(이하 "같은"여기의 값을 의미하며, B는 동일) 아이디어는 간단합니다 : 키를 사용하면 Configuration의 특성을 나타내고이 키를 사용하여 MainClass을 캐시 할 수 있습니다. 마지막으로 동일한 특성을 가진 구성을 제공 할 때 동일한 객체를 반환합니다.

+0

어떻게하면 MainClass 객체가 작동하는지 알지 못하는 일부 OtherClass 객체에서 구성을 얻을 수 있습니까? – AlexKey

+0

@AlexKey'OtherClass'가'MainClass' 메소드를 사용하고 싶지만'MainClassFactory'에 전달해야 할 설정이 없다는 것을 의미합니까? – hungr

+0

아니요, 'OtherClass'는'MainClass' 메소드를 사용하지 않고 런타임시 인스턴스화되며'MainClass'에 대해 전혀 알지 못하며 public 메소드는'MainClass'에 의해 호출됩니다. 'MainClass'에 대해서는 전혀 알지 못하기 때문에 적절한'Configuration' 객체를 얻을 수있는 방법이 없습니다. – AlexKey

관련 문제