2012-11-10 2 views
4

기존 코드를 많이 수정할 필요가없는 게임용으로 쉽게 확장 할 수있는 아이템 시스템을 디자인하고 싶습니다. 나는 새로운 효과를 가진 아이템을 즉시 추가하고 싶다.어떤 디자인 패턴을 사용해야합니까?

내 항목 공통점이 같은 특성

그것을 경우 , 전투에서 사용할 수 경우 이름이 장착 될 수있는 경우 설명, NPC의 판매 가격, , 필요한 수준, 전투 외에서도 사용할 수 있습니다. 쿨 다운

그래서 이것을 이미 클래스로 캡슐화 할 수 있습니다. 하지만 이제는 아이템 효과가 있습니다.

예 : 치유가, 가 이 무장에 X 스탯 포인트를 제공, 는 버프 X를 추가, 디버프 X를 제거, 건강 포인트, 치유 마나 포인트를 X X 장착 는 다른 효과를 만들 수의 X %의 확률,

다음과 같이 결합 할 수 있습니다. x 생명력과 마나를 치료할 수 있습니다. 처음 네 개는 사용 가능한 아이템이 가질 수있는 효과의 예이고, 마지막 두 개는 장비 아이템이 가질 수있는 효과의 예입니다.

아이디어는 데이터베이스에도이 구조가 있고 내 데이터베이스에 새로운 효과 조합이 포함 된 새 항목을 추가 할 수 있으며 내 코드는이를 읽은 다음 새로운 멋진 항목으로 구성합니다. 나를 많이 수정하지 않고. 코드 수정이 필요한 경우는 새로운 효과를 분명히 추가 할 때뿐입니다.

어떻게 이것을 디자인 패턴으로 조합 하시겠습니까?

나는 꾸미기를 생각했다. 이 디자인을위한 다른 디자인 패턴이 더 좋을까요 아니면 여러 디자인 패턴을 조합 한 것일까 요?

+0

리팩토링에 당신이 올 때 당신이 결정을 내리는 데 도움이 (그리고 결합 효과에 대한 코드를 중복)해야한다. 조합이 많고 ​​한 번에 최대 2 개의 효과 만 조합 할 수있는 경우 2 개의 ID를 사용할 수 있습니다. OOP 부분에서는 각 항목에 대해 Effect 인터페이스를 구현하는 개체 목록을 가질 수 있습니다. – nhahtdh

답변

2

데코레이터 패턴이 사용자의 요구에 적합하다고 보입니다. 다른 상판이있는 피자를 생각해보십시오. 많은 상판이있는 기본 피자를 휘게 할 수 있습니다. 결국에는 상금을 합산하는 함수를 호출합니다. 이것은 래퍼 (wrapper)의 일종이며 객체를 다음 클래스로 전달합니다. 따라서 기본 클래스 만 있으면 필요할 때 새로운 클래스를 추가 할 수 있습니다.

2

Decorator Pattern을 사용하면 개체를 수정하지 않고 추가 기능으로 장식 할 수 있습니다.

0

내가 코멘트로 할 수있는 것보다 더 말을해야 생각하지만 이것은, 귀하의 질문에 직접 대답하지 않습니다 :

코드의 덩어리를위한 디자인 패턴을 따기는 일반적으로 할 것 무언가가 아니다 선행 방식 (이 방법을 사용하는 경우 작업 한 후에 변경 가능). 이미 작동중인 코드를 이미 가지고 있고 리펙토링하려고 할 때 할 가능성이 더 큰 것입니다. - 코드를 작성하기 시작한 후에는 현재 어떤 결정을 내리 든 많은 (현재) 알려지지 않은 요소의 영향을받을 가능성이 있습니다.

작성하고 싶은 기능, 동작 및 기능에 대해 더 자세히 생각한 다음 코드를 작성하여 효과가있는 것을보고 아이디어를 더 개발할 것을 제안합니다. "factory", "decorator", "visitor"등과 같은 유행어를 미리 디자인하여 문제를 해결하려고하면 솔루션으로 이어지지 않을 것입니다 - 디자인은 계속적으로 개선되고 변화되고 반복되는 반복적 인 과정입니다. 정제.

제쳐두고, 특히 OO 설계에 대해서는 코드를 작성하는 동안 SOLID 원칙에 대해 신중히 생각하십시오. 그들은 가장 간단한 방법은, 각 효과에 ID를 부여 효과의 각을 구현하는 것입니다

http://www.blackwasp.co.uk/SOLIDPrinciples.aspx

http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

관련 문제