반응형

장식자 패턴이란, 상속 클래스에 대한 파생 클래스가 무수히 많아 지는 상황을 대비하여, 파생 정보를 분류하여 클래스에 장식하는 패턴이다.


Unity와 Unreal의 Component가 장식자 패턴과 같다.


예를 들어, 사람 클래스에 대하여 상태이상에 걸린 클래스들을 파생할 때에

[축복을 받은 사람], [중독에 걸린 사람], [감전에 걸린 사람], [축복과 감전에 걸린 사람] ...

과 같이 무수히 많은 파생 클래스가 나올 때에 장식자 패턴을 사용할 수 있다.


장식자 패턴을 사용할 때에는 기반이 되는 클래스와 장식자 패턴으로 사용할 클래스 사이에 인터페이스가 있어야한다.


Someone Class <-> Buff Class(Decorator Pattern)


Someone 클래스에 Buff 클래스를 인터페이스로 사용한다.


상태이상 클래스들을 Buff 클래스의 파생클래스로 만들어 장식자 패턴을 사용한다.




Buff 클래스 내에 Someone 변수를 통하여 Buff 클래스의 하위 클래스 내에 있는 재정의 함수들을 순서대로 실행한다.




GetBuff 함수 호출 순서는 

person = new Bless(person);

person = new Poison(person);

위의 코드 순서에 따라서


- person -

1. person = Poison Class

2. Poison::GetBuff()

3. someone->GetBuff() <Bless Class>

4. Bless::GetBuff()

5. someone->GetBuff() <Person Class>

6. Person::GetBuff()

호출 순서의 역순에 따라서 반환되는 순서는 [상태이상 : ] → [축복 ]  [중독 ] 순서로 호출되어 위와 같은 결과가 나온다.


몬스터 또한 person과 같은 방식으로 호출 및 반환된다.

반응형

+ Recent posts