3

나는 우리가 프로그래밍 할 모든 디자인 패턴으로 설명 될 수 있다는 사실을 알고 어떤 디자인 패턴이 코드에어떤 디자인 패턴입니까?


public class Guicer extends AbstractModule { 
    private static Injector injector = Guice.createInjector(new Guicer()); 

    public static void setInjector(Injector injector) { 
     Guicer.injector = injector; 
    } 

    public static <T> T getInstance(Class<T> c) { 
     return injector.getInstance(c); 
    } 

    @Override 
    protected void configure() { 

    } 
} 

를 사용하는 (심지어 추상적 인 방법은 템플릿 메소드라는 디자인 패턴이)? Id는 클래스 GuiceStateHolder를 호출하고 싶지만 그것에 대해서는 확실하지 않습니다.

+12

"프로그래밍에서 우리가하는 모든 일은 디자인 패턴으로 설명 될 수 있습니다"일반적인 실수 – Andrey

+6

디자인 패턴은 물건을 만드는 데 도움이됩니다. 너무 엄격하게 맞추는 것에 대해 걱정하지 마십시오. 그렇지 않으면 방해가됩니다. – samoz

+1

"프로그래밍에서 우리가하는 모든 일은 디자인 패턴으로 설명 될 수 있습니다"라는 말은 사실입니다. 그러나이 패턴 중 일부는 "스파게티 코드"등과 같은 이름을 가지며 실제로는 반 패턴입니다 –

답변

1

글쎄, 난이 비트를 호출 할 것입니다.

그리고 여기 :

public static <T> T getInstance(Class<T> c) { 
    return injector.getInstance(c); 
} 

당신이 전역 함수와 인스턴스 메서드를 대체합니다. 따라서 기본적으로 누구나 작성할 수있는 전역 변수가 있지만 그 중 하나의 메소드 만 호출 할 수 있습니다. 인젝터는 인터페이스가 더 많으므로 어떤 종류의 제한된 외관 일 수 있습니다.

그러나 패턴은 패턴보다 더 관용적입니다. 패턴은 원하는 동작 측면에서 달성하려는 것을 설명하지만 관용구는 코드에서 어떤 작업을 수행하는 방식입니다.

하나의 관용구에 매우 강한 패턴이 아닌 한, 코드에서 패턴을 리버스 엔지니어링 할 수 없습니다.

1

이 스 니펫은 catalog의 디자인 패턴을 나타내지 않습니다. 패턴 (싱글 톤 제외)은 일반적으로 변경 가능한 기본 구현을 설정하는 것보다 더 복잡한 관계를 나타냅니다.

+0

setInjector를 사용하면 전체 응용 프로그램에서 사용되는 인젝터의 구현을 변경할 수 있습니다. 또한 getInstance는 Fasade의 일종이라고 생각합니다.이 페이지에는 모든 디자인 패턴이 있습니다. 가장 일반적인 몇 가지가 있습니다 – IAdapter

+1

"모든 디자인 패턴"에 대한 명확한 목록은 없습니다 –

+0

@ Andreas Brink - http://martinfowler.com/eaaCatalog/ GoF 등 카탈로그가 필요합니다. – stacker

2

그래, 이건 실제로 어떤 패턴의 표준적인 예제가 아니라는 것을 동의하지만, 의존성 주입 요소 (분명히 Guice를 사용하고 있습니다)와 팩토리 메소드 (getInstance())를 봅니다.

private static Injector injector = Guice.createInjector(new Guicer()); 

public static void setInjector(Injector injector) { 
    Guicer.injector = injector; 
} 

쓰기 전용 전역 변수 :

+0

@Andreas : .getInstance()'는 항상 같은 Object를 반환합니다 (그렇다고 가정합니다), 그렇다면 이것은 싱글 톤입니다. 인스턴스 (* DI 개체가 업데이트/대체 되나요? *) 그러면 팩터 리 방법입니다. – Esko

+0

@Esko 네, 원래 코드를 잘못 읽었습니다. 그래서 내 말을 삭제했습니다. –

+0

@ Andreas : 내 대답을 게시 한 후 SO가 분명히 댓글을 캐시하여 나에게 보여주고 있습니다. 걱정하지 마십시오. ':) – Esko

관련 문제