본문 바로가기

Language/Design Pattern

[Design Pattern: 구조] 9. Decorator

목적

  • 주어진 상황이나 용도에 따라 덧붙히는 패턴
  • 기능의 확장이 필요할때 서브클래스를 만드는 것보다 유연한 구조를 만들 수 있는 대안

예제를 보면 정말 쉽게 알 수 있다. 계속 캡슐로 기능을 싸는 형식이라고 생각하면 쉽다.

Decorator Pattern in JAVA API



예제

스타크래프트로 예제를 작성하겠다. 데코레이트는 부가적은 기능을 늘려주는 목적이기 때문에 하이템플러의 능력을 업그레이드 하는 과정을 표현했다.

일단 하이템플러를 뽑으면 기본적으로 아무 능력을 발휘할 수 없다(피드백은 됨. 머 없다칩시다). 업그레이드를 통해 하이템플러에게 능력을 강화해보자




일단 유닉에 관련된 클래스다. 딱히 설명하지는 않겠다.





Upgrade absraction이다. Unit을 받아오기 때문에 데코레이터 패턴을 만들 수 가 있다.

Upgrade를 상속받은 다양한 업그레이드를 만들었다.

싸이오닉 스톰, 환상, 그리고 마나 업. 그중에서도 마나 업그레이드는 좀 특이하게 얼마의 마나가 업그레이드 될지를 정할 수 있게 만들어보았다.(실제 스타에서는 50으로 고정값입니다. 좀 다른 상황을 만들려고 했습니다.)





이렇게 사용한다. 처음에 하이템플러를 만들고 능력을 보면 그냥 하이템플러다.

하지만 업그레이드로 계속 싸는 과정을 거치고 확인해보면

쌓는 업그레이드 능력을 다 가진 하이템플러가 된다.


만약 하나의 업그레이드만 했다면 하나의 능력만 업그레이드 됬을꺼다.



<출력결과>

HighTempler
싸이오닉 스톰을 쓸 수 있는, 마나가 +100늘어난, 환상을 쓸 수 있는, HighTempler