2014-11-23 6 views
0

학교 과제를 위해 나는 전략 패턴을 구현해야하며, 질문에 따라 적절한 전략을 얻는 인터페이스와 컨텍스트 패턴을 완전히 이해하지만, 내 특정 문제를 구현하는 방법을 알아낼 것 같습니다.내 특정 문제에 대한 전략 패턴 구현

문제 :

의 (a UML-classdiagram와) 솔루션의 설계를 부여 문제 다음 해결 : 시스템이 (이것에 대한 클래스 요리사를 사용하여) 몇 가지 요리를 관리합니다. 이 요리사 중 일부는 요리 세션을 준비하기 위해 다른 요리사와 다른 것을 필요로합니다.이 방법으로 요리사는 다른 요리사를 구별하고 다른 설정을 제공 할 수 있습니다. 이 시스템은 많은 요리사와 함께 작동하는 일련의 레스토랑에서 사용됩니다. 제한된 조합의 준비를 기반으로 올바른 요리사를 구성하는 것이 중요합니다. 특정 유형의 요리사를 제거하거나 새 요리사를 추가하는 것이 매우 쉬워야합니다. 솔루션은 요리사의 prepare() 메서드를 호출 한 후에 다른 단계를 표시 할 수 있어야합니다. 몇 가지 예 : 요리사 Jeroen은 '앞치마를 두는 것'이 필요하며 대부분의 다른 요리사가하는 일이기도합니다. 그러나 기독교인은 앞치마를 입히고, 칼을 들고 고전 음악을 틀어 놓아야합니다. 그리고 요리사 인 Nini와 Leo는 맥주를 열고 하드락을 몇 개 준비해야합니다. 주의 : 일부 동작에는 다른 클래스와의 상호 작용이 필요합니다 (솔루션에 명시 적으로 포함 할 필요가 없음). 따라서 문자열 속성 '준비'를 추가하는 것만으로는 충분하지 않습니다!

내 생각은 Preperation를이 텟 전략 인터페이스이며 preperations의 종류는 (여기 예를 당 : http://upload.wikimedia.org/wikipedia/commons/3/39/Strategy_Pattern_in_UML.png) ConcreteStrategies 있다는 것입니다 그리고 요리사는

당신이에 도움이 되거 수 있기를 바랍니다이 예에서 상황입니다 문제의 내 explenation을 대체하고 원래 텍스트

당신이 올바른 궤도에있어
+0

무엇이 당신의 질문입니까? 또한, 저에게 책임의 사슬처럼 들립니다. –

+0

그래서 디자인 패턴이 있고 적용 할 문제를 찾고 있습니다. 이것이 바로 디자인 패턴을 사용하지 말아야하는 방법입니다. 당신이 가지고 있어야하는 것은 해결해야 할 문제이며,이 문제를 우아하게 해결하는 패턴을 적용하십시오. 패턴은 코드에서 나오고, 그 반대는 아닙니다.문제에 대한 설명에서 전략 패턴이 어디에 적합한 지 알 수 없습니다. –

+0

내 게시물에 전략 패턴이 사용되지 않습니다. Strategy Pattern (전략 패턴)이 실제로이 과제에서 해결할 문제는 무엇인지 자문 해보십시오. – FunctionR

답변

0

를 삽입 : 나를 위해

편집 (내가 테 올바른 방향으로 대신 전체 솔루션을 향한 힌트를 선호하는 것). 각 Cook에는 Preparation 인터페이스 목록이 있어야합니다. 나는 setter 대신에 이들의 목록을 취하는 요리사를위한 생성자를 갖는 것이 좋습니다. 준비 인터페이스에는 준비에 대한 설명을 얻을 수있는 방법이 있어야합니다. getDescription(). 그런 다음 PutApronOnPreparation과 같은 구현을 만들 수 있으며이 생성자는 description이라는 String 멤버를 가질 수 있으며 생성자에서도 설정할 수 있습니다. 지금

class PutApronOnPreparation implements Preparation { 
    private final String description; 

    public PutApronOnPreparation(String description) { 
     this.description = description; 
    } 

    @Override 
    public getDescription() { 
     return description; 
    } 
} 

당신이이 Preparation 구현의 목록이 초기화 된 Cook 인스턴스가있는 경우, 그 prepare() 방법은 목록을 반복하고 각각에 대한 getDescription()를 호출 할 수 있습니다 : 이것은 같을 것이다 것입니다 그들. 마지막으로

, 당신은 getDescription() 값이 해당 문자열을 포함하는 경우 준비 목록과 검사를 통해 문자열 인수 어느 반복 걸릴 수 있습니다 hasPreparation(...) 등의 다른 방법을 가질 수 Cook 인스턴스의 수를 검색합니다. 또는 준비를 인수로 취할 수 있으며 equals() 메서드를 재정 의하여 객체를 직접 일치시킬 수 있습니다.