2012-08-25 3 views
0

300 개의 다른 종류의 단위가 있다고 상상해보십시오. 각 유닛마다 다른 특수 능력이 있습니다. 예를 들어 unit18은 나무 근처에 있으면 보이지 않게됩니다. Unit33과 Unit212는 동일한 능력을가집니다. 영리한 방법으로 300 개의 고유 단위를 어떻게 모델링 할 수 있습니까?objc 패턴으로 많은 다른 클래스 모델링

두 가지 아이디어 만 있습니다. 각 단위에 대해 하나의 클래스를 만들고 300 클래스로 끝내십시오.

for (Unit *unit in units) 
{ 
    if ([unit isKindOfClass:[Unit1 class]]) 
    { 
     // do something 
    } 
    else if ([unit isKindOfClass:[Unit2 class]]) 
    { 
     // do something 
    } 
    else if ([unit isKindOfClass:[Unitxxx class]]) 
    { 
     // do something 
    } 
} 

이 다른 솔루션은 모든 능력을 가진 기둥 괴물 단위 클래스를 생성한다 : 그리고 내가 가진 모든 시간이 것 같은 구조를 확인합니다. 이 게시물에서 설명한 것처럼

나는 디자인의 생각 : http://www.learn-cocos2d.com/2010/06/prefer-composition-inheritance/

이미 디자인의이 종류를 만들려고하지만 잘되지 않았다. enter image description here

모든 제안에 감사드립니다.

미리 감사드립니다.

+0

모든 개체를 배열에로드해야 동적이며 효율적인 코드를 작성할 수 있습니다. –

+0

그래서 300 개의 다른 클래스를 생성하는 것이 좋습니다. 각 단위당 하나? – zeiteisen

+0

이런 종류의 질문이 gamedev에 더 적합하다고 생각합니다 .SE – JustSid

답변

1

Protocols을 사용해보세요. Unit18, Unit33 및 Unit212는 모두 TreeInvisibility 프로토콜을 준수 할 수 있습니다.

확인할 사항은 프로토콜을 준수하는 장치인지, [unit conformsToProtocol:@protocol(TreeInvisibility)]으로 전화하십시오.

좋은 점은 클래스가 여러 프로토콜을 상속받을 수 있다는 것입니다. 이를 통해 프로토콜 조합을 혼합하고 일치시킬 수 있습니다.


이제 더 생각해 보았습니다. 모든 프로토콜 외에도이 방법을 사용하여 300 클래스를 작성해야합니다. 이렇게하면 개별 클래스가 아닌 다른 프로토콜 만 확인하면되므로 장치를보다 쉽게 ​​제어 할 수 있습니다.

귀하를위한 최상의 해결책은 아니지만 좋은 방향으로 안내해 주시면 도움이 될 것입니다.

관련 문제