2010-06-04 2 views
0

윈도우 폼 애플리케이션을 개발 중입니다. 싱글 톤 디자인 패턴을 구현해야합니다. 동일한 패키지에있는 두 클래스의 싱글 톤을 구현할 때 제대로 작동하지만 클래스의 두 클래스 모두에 대한 객체를 작성하여 다른 패키지의 두 클래스를 구현합니다. 어떻게 구현할 수 있습니까? 여기에 코드입니다 : 당신이 사방 공공 접근을 가지고 있기 때문에,하나의 프로젝트에서 다른 프로젝트로 싱글 톤을 구현하는 방법

public class Singleton 
{ 
    private static Singleton instance; 
    B b=new B(); 
    private Singleton() {} 

    public static Singleton Instance 
    { 
     get 
     { 
     if (instance == null) 
     { 
      instance = new Singleton(); 
     } 
     return instance; 
     } 
    } 

public void a() 
{ 
} 
b.c(); 
} 


public class B 
{ 
SingleTon single=new SingleTon.Instance; 
single.a() 
public void c() 
{ 
} 
} 
+2

"작동하지 않음"은 현재 수행중인 작업에 대한 설명이 아닙니다. – zerkms

+1

몇 가지 코드를 보여주십시오. –

+0

B 클래스에서 SingleTon이라는 이름을 사용할 때주의하십시오. C# 이름은 대소 문자를 구분합니다. – Arseny

답변

-1

당신이 작동합니다 여기에 쓴 코드 (? 확인 Instence 내가 생각하는 방법입니다 ..), 또 다른 프로젝트는 문제가되지 않습니다, 어디는 필요합니다. 조금 다른 문제가 있습니까?

+0

-1이 코드는 컴파일되지 않으며 "작동해야합니다". – drharris

0

싱글 톤 패턴의 아이디어는 동일한 개체를 사용하고 새 개체를 만드는 것이 아닙니다. 코드 스 니펫의 모든 구문 오류와 별개로 '새로운'Singleton을 만들려고해서는 안됩니다. 싱글 톤의 생성자가

0

첫 번째 클래스 B.에 표시되지 않기 때문에 사용자가 외부에서이 노출되는 경우 private Singleton singleton = Singleton.Instance; 당신이 그것을 쓴 방법은, 그것은, 컴파일되지 것 대신 클래스 B에서이 같은 라인을 가져야한다 프로젝트에서 Singleton 대신 Abstract Factory Pattern을 사용해보십시오. 이 문제가 발생할 수있는 이유는 내 own question을 참조하십시오.

그러나, 당신은 작은 시작해야하는 경우 : 라이브러리로 (이 당신을 의미 싱글과 B 사이에 아주 꽉 커플 링 (거의 교착 상태), 생성 미리 양해한다

public class Singleton 
{ 
    private static Singleton instance = new Singleton(); 
    private Singleton() { } 
    public static Singleton Instance { get { return instance; } } 
    public void a(B b) 
    { 
     b.c(); 
    } 
} 

public class B 
{ 
    static void Main() 
    { 
     B b = new B(); 
     Singleton.Instance.a(b); 
    } 

    public void c() 
    { 
     // whatever you want it to do 
    } 
} 

을하지만, 제작자)는 이것을 사용할 모든 클래스 B에 대해 알아야합니다. 이것이 매우 다른 디자인을 고려해보십시오. 왜냐하면 이것이 싱글 톤을 구현하는 끔찍한 방법이기 때문입니다. 나는이 코드를 게시하는 것을 거의 싫어하지만이 면책 조항을 사용하여 그렇게하고 있습니다.

관련 문제