2016-07-11 6 views
-2

나는 우리가 C c VAR를 넣어 경우 코드의 일부 조각이모든 개체에 대해 정적 또는 새 인스턴스가 필요합니까?

public class A { 

public void doSomething(B b) { 
    b.addSometing("queue1", getDefault()); 
    b.addSometing("queue2", getDefault()); 
    b.addSometing("queue3", getDefault()); 
} 

private C getDefault() { 
    C c = new C(); 
    c.setAutoCreate(true); 
    c.setExired(false); 
    c.setDelay(3500); 

    return c; 
}} 

처럼 보인다 보았다. (클래스 A의 모든 객체에 대한 기본값)는 A 클래스의 모든 객체에 대해, A 클래스의 많은 객체에 대해 많은 메모리를 사용합니다. C c을 정적으로 만드는 것이 더 좋을까요? 클래스 전체에 대해 C 클래스의 인스턴스를 하나만 만들고 클래스 A의 모든 객체에 사용합니다. 우리가 그렇게 할 경우 해당 코드 뒤에 나는 아마 내가 틀렸다, 그것이 더 좋은 방법이라고 생각

public class A { 
private static C c = new C(); 

static { 
    c.setAutoCreate(true); 
    c.setExired(false); 
    c.setDelay(3500); 
} 

public void doSomething(B b) { 
    b.addSometing("queue1", c); 
    b.addSometing("queue2", c); 
    b.addSometing("queue3", c); 
} 

}

처럼 같은 것입니다. 제게 조언 해주세요.

+0

마지막 하나는 나던 나에게 그렇게 많은 의미를 첫 번째 장소는 여러 개의 키에 대해 하나의 값만 가질 때입니까? – SomeJavaGuy

+3

_If_ 기본값으로 정적 인스턴스를 사용하는 경우 _immutable_이어야합니다. 그렇지 않으면 부작용이 발생할 수 있습니다. 'setAutocreate (true)'등은 불변으로 보이지 않습니다. – Thomas

+0

'queue1'의 c 오브젝트를 변경하면 'queue2'및 'queue3'의 오브젝트도 변경됩니다. 이것이 받아 들일 수 있다면, 정적 솔루션은 괜찮아 보인다. – Jeet

답변

2

이 질문에 대한 답변은 응용 프로그램의 논리 및/또는 A가 C 인스턴스로 수행해야하는 작업에 따라 다릅니다. 특정 객체의 인스턴스가 한 번만 필요하면 Java에서 Singleton 패턴을 사용하는 것이 좋습니다 https://en.wikipedia.org/wiki/Singleton_pattern.

그러나 클래스 A의 인스턴스가 C 멤버를 변경하는 경우 하나의 A 개체에서 C 멤버를 변경하면 위의 방법을 사용하는 것이 좋지 않습니다. 또는 다른 A 오브젝트에서 수행 할 수 있습니다.

C 개체에 모든 개체에서 사용되는 구성 옵션이나 데이터가 포함되어 있으므로 위의 예에서 설명한대로 변경 될 수는 없습니다. 단점 패턴을 사용하여 모든 A 개체에 액세스 할 수 있습니다 인스턴스 - 제 생각에는 괜찮습니다. 당신은`지도`에 함께가는 고려 왜 다른 키 맵을 C``의 동일한 인스턴스를 추가하는 경우

보다도, 줄리안