2010-06-09 5 views
12

누군가 최근에 고스트 디자인 패턴에 관한 질문을했습니다.고스트 디자인 패턴이란 무엇입니까?

고스트 디자인 패턴은 무엇이며 어떻게 구현됩니까? 웹에서만 스 니펫을 찾을 수 있습니다.

+3

* 내가 할 수있는 나쁜 농담 ... * –

+1

건축가 인터뷰에서 필자는 "LeftHandedSpinWidget 디자인 패턴에 대해 아무 것도 말해 줄 수 있습니까?" 혼란과 씨름하는 것을 지켜보십시오. LeftHandedSpinWidget 디자인 패턴은 없습니다. –

+0

@Swingline 그건 잔인합니다. 유령은 진짜 본이다. –

답변

21

디자인 패턴과 '고스트'에 대한 유일한 언급은 Lazy-Loading입니다.

실제로 지연이 필요할 때만 객체를로드하는 작업이 포함되기 때문에 그때까지 '고스트'라고 생각할 수 있습니다. 개요를 볼 수는 있지만로드 될 때까지 실제로 사용할 수는 없습니다.

+0

그래, 그걸 읽었는데 나 한테는 의미가별로 없어. –

+0

@David : 그래, 누군가가 그걸 만졌을 때 유령이 언제 실현 되니? – intuited

3

GOF도 Fowler PoEAA도 아니고, 게으른 로딩을위한 프록시와 비슷한 것으로 생각할 수있는 유일한 것입니다.

+0

그건 이해할 만하다. –

3

유령은 PoEAA, pp 202, 206-14에 언급되어 있습니다. 고스트는 필요에 따라 인스턴스화 할 수있는 충분한 정보가 포함 된로드 된 객체입니다. 그것들은 로더 (Fowler가 그 비트를 언급하더라도 dunno)를 등록하면 첫 번째 액세스에서 유사한 유령의 대량로드를 트리거 할 수 있기 때문에 유용 할 수 있습니다.

0

나는 실제로 하나를 만든 다음 묻어서 유령 패턴임을 깨달았다. a question here in SO. 이 클래스를 초기화하면

// A "cheap" class 
class Namespace_Original 
    { 
    // The expensive, uninitialised object 
    private Original 

    // The "cheap" data needed to initialize Original 
    private Data 

    // Constructor for the cheap class 
    public Namespace_Original(Data) 
    { 
    this.Data = Data 
    } 

    // Whenever you call a method of Original 
    public __call(method_name, method_data) 
    { 
    // Create the expensive object only the first time it's going to be used 
    if (empty(this.Original)) 
     this.Original = new Original(this.Data); 

    // Call the Original's method with it's arguments 
    this.Original.name(method_data); 
    } 
    } 

, 아무것도 안에 작성되지 않습니다 : 원래 PHP 코드에 대한 링크를 따라 여기에 의사 코드 버전입니다. 그것은 "Original"객체가 생성 된 메소드를 호출 할 때, 실제로 존재하지 않는 객체와 데이터가 검색된 메소드를 호출 할 때입니다. 값 비싼 조작이라면, 사용하지 않으려는 경우 원본을 초기화하지 않게 만듭니다.

관련 문제