2012-12-07 2 views
1

우선, Objective-C를 사용하고 있지만, 이것은 전혀 중요하지 않습니다.이 상황을 해결하기 위해 어떤 디자인 패턴을 사용할 수 있습니까?

내 상황은 다음과 같습니다.

두 가지 시나리오가 있습니다. 내가 좋아하는 전 처리기 매크로에 의해 구별 :

#ifdef USER 
    do some stuff for scenario 1 
#else 
    do some stuff for scenario 2 

두 시나리오 모두 모든 응용 프로그램에서 항목의 목록과 함께 작동하지만 차이는 해당 항목을 얻을 수있는 방법입니다.

처음에는 서버에 요청을 보내 항목을 가져옵니다.

두 번째로는 로컬 장치 저장소에서 가져옵니다.

지금 내가 수행 한 두 번째 시나리오가 구현되었습니다. 나는 로컬 스토리지에서 항목을 가져 와서 항목 목록을 반환하는 싱글 톤 클래스를가집니다. (전통적인 데이터베이스 싱글 톤처럼)

다른 시나리오를 추가하고 싶습니다. 항목은 앱의 어느 지점에서나 얻을 수 있기 때문에 나는 이것을 싱글 톤이되기를 바랍니다.

싱글 톤 수퍼 클래스를 갖고 항목을 가져 오는 여러 가지 방법을 구현하는 두 개의 하위 클래스를 갖는 것이 합리적입니까? 싱글 톤 계층 구조는 나에게 이상하게 들린다.

+0

런타임 때까지 어떤 클래스를 인스턴스화해야하는지 알 수 없으므로 팩토리 메서드와 같은 사운드가 이상적입니다. – DavidB

+0

컴파일 시간 (실제로는 전처리 시간)에 알 수 있습니다. – pdrcabrod

답변

1

정확히 계층 구조는 아닙니다. 언급하고있는 수퍼 클래스는 실제로 인터페이스 인입니다. 원하는 경우에는 2 개의 구체적인 클래스를 사용할 수 있습니다. 인터페이스는 추상 엔티티이므로 모든 인스턴스 관련 용어는 관련이 없습니다.

시나리오 선택을 위해 전 처리기를 사용하여 프로그램 동작을 정적으로 정의하고 있습니다. 이 접근 방식을 고수하고 요구 사항에 맞으면 어떤 디자인 패턴도 필요하지 않습니다. 귀하의 코드에서 정적으로 인스턴스화 된 데이터에 대한 포트입니다 위에서 언급 한 인터페이스를 사용하십시오. 좀 더 융통성을 원한다면 (아마도 그렇게 들릴 것입니다) 런타임에 시나리오 선택을 할 수 있습니다. 이 경우 시나리오 적용에 유용한 Strategy pattern과 인스턴스화를 위해 Factory pattern을 찾을 수 있습니다.

+0

그게 내가 한 짓이야. 인터페이스를 정의한 다음 두 클래스 모두 구현했습니다. 감사 – pdrcabrod

1

FactoryStrategy을 조합 한 것.

팩토리는 단지 생성자를 사용하는 대신 다른 클래스를 사용하여 인스턴스를 만드는 패턴입니다. 당신은 이미 싱글 톤으로 그렇게하고 있습니다.

실제로 rutime에서 어떤 종류의 개체가 공장에서 만들어 지도록 구성 할 수있는 전략.

관련 문제