1

을에 Stategy,하지만 난이 일반적인 질문이 될 수도 있겠죠, 그래서 더 막연하게 그것을 프레임거야 전략 패턴을 구현하는 특정 클래스의 개체에 대한 매개 변수 다양한 객체가 존재할 것이며 이는 우리가 이러한 객체를 사용자 정의하는 디자이너 친화적 인 솔루션으로 작용합니다. XML 파일에서 문자열 만 정의 할 수 있으므로 누군가 해당 문자열을 가져 와서 적절한 전략을 구현할 수있는 깔끔한 방법을 제안 할 수 있습니까?문자열 전략 패턴 내가 AS3에서 일하고 있어요

두 가지 초기 생각이 있습니다. 첫째, 문자열을 객체의 생성자에 전달한 다음 올바른 전략을 적용하는 객체 내에서 Switch Case를 사용합니다.

두 번째로 컨트롤러의 클래스 외부에 스위치를 놓은 다음 올바른 전략을 개체의 생성자에 전달합니다.

두 번째 버전은 클리너 버전처럼 보이지만 개체 클래스 자체는 내 특정 구현에 영향을받지 않습니다. 그러나 어느 쪽도 옳은 느낌이 아닙니다.

추가 제안 사항을 보내 주시면 감사하겠습니다.

답변

3

입력 문자열을 기반으로 적절한 클래스를 선택하려면 일종의 Factory 디자인 패턴이 필요합니다. 그 좋은 응용 프로그램은 Registry입니다. 적용 가능한 클래스는 특정 입력 문자열에 적합한 것으로 singleton Registry 클래스에 "등록"됩니다. 공장 자체는 문자열에서 등록 된 클래스에 대한 조회가됩니다. 요청 된 입력 문자열에 대해 등록 된 클래스가없는 경우 대체가 필요합니다. 예외 또는 더 이상 특정 입력이 적용되지 않을 때 사용되는 기본 구현이 있습니다. 후자는 좋은 오류 방지 소프트 옵션입니다. , 항상 적용 가능한 것은 아닙니다.

레지스트리에 대한 필연적 인 문제는 관심있는 모든 클래스를 찾고 자신을 등록하는 방법입니다 (특히 플러그인 클래스에서 흥미 롭습니다). 이것에 대한 최선의 해결책은 특정 언어에 의존하기 때문에 유감스럽게도 AS3이 제공하는 것에 대해서는 확신 할 수 없습니다 (또는 그러한 역동적 인 확장성에 관심이 있다면).

레지스트리에 대한 또 다른 흥미로운 문제는 "충돌"입니다. 하나 이상의 적용 가능한 클래스가 특정 입력 문자열에 대해 올바른 것으로 주장되면 어떻게됩니까? "최후 주장"은 가장 단순하지만 종종 너무 단순합니다. 각 클래스는 특정 "우선 순위"또는 "우선 순위"가있는 여러 입력 문자열에 대해 등록 할 수 있습니다 (배포되지 않은 시스템에서는별로 흥미롭지 않지만 분산 시스템에서는 중요합니다 ...) 적용 가능한 "서버"(라운드 로빈 또는보다 정교한 방식).

이러한 솔루션은 첫 번째 것보다 두 번째와 비슷하지만, 주된 차이점은 취약한 하드 코딩 된 스위치 (OOP bete noire ;-) 대신 유연한 매핑에 의존한다는 것입니다 구현 언어의 세부 사항에 따라 문자열에서 클래스로 (또는 클래스를 생성하는 메소드, 대리자, & c) - 예를 들어 Java에서 StrategyConstructing 인터페이스를 가질 수 있습니다. 각 전략 클래스는 서명 할 때 해당 전략을 구현하는 자체 보조 클래스를 등록합니다 레지스트리까지).

0

예는, 알렉스가 올바른 방법 ... 구현 세부 사항에 대한

, 당신은 비슷한 문제를 다루는 this post 봐,이 할 수 있습니다 지적 ... 내 대답은 얻을 예를 들어 구현을 포함 시작 ...

더 견고하기 때문에 문자열 < -> 인스턴스 매핑을 수행해야한다고 생각합니다.전략은 적용 대상의 관점에서 무 상태이어야하며 해당 대상에서 모든 입력을 수신해야합니다 ... 런타임에서 전략을 전환 할 수있는 방법입니다. 임의의 지점에서 대상과 전략의 상태를 동기화하는 것이 명확하지 않기 때문에 실행 ...

greetz

back2dos