문제

내 문제는 다음과 같습니다. 주어진 수업이 다른 클래스를 인스턴스화 할 수있는 방법이 필요합니다. 나는 다른 사람을 중첩 된 내부 수업이나 그런 바보로 만들고 싶지 않습니다. 어떻게해야합니까? 나는 잊어 버린다.

도움이 되었습니까?

해결책

생성자를 비공개로 만드십시오. 액세스가 허용되는 클래스의 인스턴스를 취하는 정적 공장 메소드를 만듭니다. 공장 방법에 적합한 객체를 만들고 생성 된 객체에 액세스 할 수있는 객체의 세트 토를 사용하여 해당 클래스에 생성 된 사본을 제공하십시오.

public class AllowedAccess
{
    private SecureClass secure;
    public setSecureClass( SecureClass secure )
    {
        this.secure = secure;
    }

    ...
}

public class SecureClass
{
     private SecureClass() {}

     public static void Create( AllowedAccess allowed )
     {
          allowed.setSecureClass( new SecureClass() );
     }

     ...
}

BTW, 나는이 디자인을 의심합니다. 나에게 너무 크게 결합 된 것 같습니다.

다른 팁

개인 정적 내부 클래스는 정확히 당신이 원하는 것입니다. 그것에 대해 멍청한 것은 없습니다.

public class Creator {
  private static class Created {
  }
}

그렇지 않으면 패키지 레벨에서만 인스턴스화를 보호 할 수 있습니다.

public class Created {
  Created() {
  }
}

동일한 패키지의 클래스 만 생성자에 대한 액세스를 제공합니다.

Instantiation 패키지로부터 보호 될 수업을 비공개로 만들 수 있습니다.

나는 TVANFOSSON의 답변과 너무 높은 커플 링에 대한 그의 의견에 동의합니다. 왜 당신은 왜 제어의 역전 프레임 워크와 같은 또는 기체?

"새로운"진술로 클래스를 만드는 IMHO는 약간의 것으로 간주되어야합니다 ... 쓸모없고, 공장은 선호되어야하며 IOC 프레임 워크가 훨씬 더 많아야합니다.

문안 인사

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top