2013-04-23 2 views
0

연습은 Robot Factory를 관리하기위한 소프트웨어를 만드는 것에 관한 것입니다.C#의 복합 패턴

내 프로그램에서는 단일 부품을 만든 다음 로봇과 함께 로봇을 만들 수 있지만 내부에 소형 로봇을 갖춘 로봇을 가질 수도 있습니다. 그것이 실제로 Composite가 들어오는 곳입니다. 실제로 Component 클래스는 Part 일 수 있고 Composite 클래스는 Part 목록을 구현하고 Part 클래스를 상속합니다 (이는 로봇이 단일 파트로도 구성 될 수 있기 때문입니다)

모든 것이이 솔루션을 가리키고 있지만 문제는 2 가지 유형의 부품이 있다고 말하면서 문제가 발생합니다. 육지와 수생 및 로봇은 서로 다른 유형의 부품으로 만들 수 없습니다.

다이어그램을 보면 코드 내에서 제한하려고해도 두 가지 종류의 파트로 만들어진 Robot을 가질 수 있기 때문에 이것이 실제로 실행 가능한지는 알 수 없습니다. 여기

은 UML 다이어그램 여기 enter image description here

+0

무엇이 문제입니까? –

+0

UML이 괜찮은지 또는 어떻게 할 수 있을지 생각합니다. –

+1

btw 나는 추상적 인 로봇, 수중 로봇 및 지상 로봇, 분명히 수생 동물 목록이있는 수생 로봇, 지상의 것 지상파 부품 –

답변

2

우리는이 문제에 대한 두 솔루션이에게있다 :

Robot UML

당신의 사용을 살려주는하고 있지만 그들은 기본적으로 동일하다 " xor "제한을 설정하고 추가 복잡성을 위해이를 거래합니다.

이 두 가지 솔루션에는 약간의 차이가 있습니다. 왼쪽에는 최소한 1 개의 수생 또는 육상 부분이없는 로봇을 가질 수 없습니다 (처음에 언급되지 않았 음). 오른쪽에서 파트가없는 로봇을 가질 수 있습니다 (언급하지 않았 음).

두 솔루션 모두에서 다중성을 변경함으로써 부품이 전혀없는 로봇이나 로봇이 아닌 로봇을 적어도 하나 이상 선택할 수 있습니다. 이것은 이상적인 것이 아니며, 복합 패턴은 방금 언급 한 것에서 벗어나지 않습니다. 나는 더 나은 해결책을 생각할 수 없다.

+0

먼저 도움에 감사드립니다. 증가 할 수있는 바다와 일치하는 프리메이슨 컨테스트 프리메로! 나는 당신의 예제에서 로봇이 Part로부터 상속 받았다고 말할 수 없다. 그게 합성물을 무찌르는 것이 아닌가? 예를 들어,이 http://www.dofactory.com/Patterns/PatternComposite.aspx#_self1을 따라 가면 내 구성 요소가 부이고 복합 요소가 로봇이므로 내 로봇이 부품에서 상속 받아야 모든 메소드를 얻을 수 있습니까? – user2313248

1

다음은 제네릭을 사용하여 다중 상속 및 합성 패턴에 대해 작성한 CodeReview 기사입니다.

https://codereview.stackexchange.com/questions/14542/multiple-inheritance-and-composition-with-java-and-c-updated

이렇게하면 구현을 작성하는 방법에 대한 몇 가지 아이디어를 줄 수 있습니다. 어떤면에서 당신이 말하는 것은 다형성입니다.

첫째, 구성 패턴을 사용하여 목표를 달성 할 수 있지만 인터페이스 사용도 잊지 마세요.