정적 팩토리 패턴을 사용하는 동안 분기를 피하는 방법은 무엇입니까?

케 샤브 라 가브

정적 팩토리 패턴을 배포 할 때 종종 분기에 갇히게됩니다. 아래 코드보다 더 깔끔하게 만들 수있는 방법이 있습니까?

 private static TestEdition GetCurrentEdition(userconfig config)
    {
        if (config.Edition == Edition.typea)
        {
            return new TestEdition3(config);
        }
        else if (config.Edition == Edition.typeb)
        {
            return new TestEdition4(config);
        }
        return new UnsupportedEdition(config);  
    }
수수께끼

나는 이런 종류의 것을 많이 사용하는 경향이 있습니다.

private static Dictionary<Edition, Func<userconfig, TestEdition>> _factories =
    new Dictionary<Edition, Func<userconfig, TestEdition>>()
    {
        { Edition.typea, c => new TestEdition3(c) },
        { Edition.typeb, c => new TestEdition4(c) },
    }

private static TestEdition GetCurrentEdition(userconfig config)
{
    if (_factories.ContainsKey(config.Edition))
    {
        return _factories[config.Edition](config);
    }
    return new UnsupportedEdition(config);
}

큰 장점은 Dictionary<Edition, Func<userconfig, TestEdition>>런타임에를 구성하고 확장 할 수 있다는 것 입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

종속성 주입 및 팩토리 패턴을 사용하여 ViewController 사용자 정의 초기화를 구현하는 방법은 무엇입니까?

Selenium에서 페이지 팩토리를 사용하는 동안 명시 적으로 기다리는 방법은 무엇입니까?

php-deployer를 사용하는 동안 릴리스 제한을 설정하는 방법은 무엇입니까?

생성자 대신 "정적 팩토리 메소드"를 사용하는 방법은 무엇입니까?

이 비동기 지연 패턴을 피하는 방법은 무엇입니까?

각도 팩토리 방법을 동적으로 할당하는 방법은 무엇입니까?

PRG 패턴을 사용하는 동안 현재 상태를 유지하는 방법은 무엇입니까?

Error-back 비동기 함수를 사용하는 동안 Node.JS에서 콜백 지옥을 피하는 일반적인 방법은 무엇입니까?

vavr에서 Map을 사용하는 동안 AtomicReference를 사용하는 관용적 방법은 무엇입니까?

컴파일하는 동안 팩토리 패턴이 오류를 반환하는 이유는 무엇입니까?

순환 종속성을 피하기 위해 이것을 리팩토링하는 방법은 무엇입니까?

사용하는 팩토리 메소드 패턴의 동기는 간단 공장보다는 무엇입니까

AngularJS에서 다른 팩토리를 사용하는 비동기 팩토리를 단위 테스트하는 방법은 무엇입니까?

팩토리 생성자를 사용하여 Dart에서 Singleton 패턴을 구현하는 방법은 무엇입니까?

리포지토리 패턴을 사용하여 EF Core 3.0에서 병렬 비동기 쿼리를 만드는 방법은 무엇입니까?

WebEngine (Chromium) 렌더러에서 제공하는 미리보기를 사용하는 동안 ReText 충돌을 수정하는 방법은 무엇입니까?

테이블을 조인하는 동안 하위 쿼리를 피하는 방법은 무엇입니까?

Flutter에서 JsonSerializable을 사용하는 동안 동적 키를 인식하는 방법은 무엇입니까?

다른 디렉토리를 사용하여 정적 자산을 제공하는 방법은 무엇입니까?

다른 디렉토리를 사용하여 정적 자산을 제공하는 방법은 무엇입니까?

fit_generator로 keras 모델을 피팅하는 동안 'MemoryError'를 수정하는 방법은 무엇입니까?

Gradle의 동적 버전을 사용하고 베타를 피하는 방법은 무엇입니까?

불확실성 패키지를 사용하는 동안 ZeroDivisionError를 수정하는 방법은 무엇입니까?

WHEN을 사용하는 동안 Type 예상 오류를 피하는 방법은 무엇입니까?

Composer를 사용하여 분기를 안정적으로 표시하는 방법은 무엇입니까?

Intent를 사용하여 startActivity 동안 검은 화면을 피하는 방법은 무엇입니까?

클래스를 취하고 정적 멤버가있는 팩토리를 반환하는 함수에 주석을 추가하는 방법은 무엇입니까?

케이크에 디렉토리 파일을 압축하는 동안 제외 패턴 (.pdb, .xml)을 사용하는 방법은 무엇입니까?

Numpy 배열을 만드는 동안 정밀도 오류를 피하는 방법은 무엇입니까?