막상 중요한 7장 발표때는 제가 못나갔죠.. ㅠㅠ;;
그래서 지금 열심히 독서하다가 이거닷! 하고 감이 와서 간단히 요약해 봅니다.
...저만 알아볼 수 있을지도 모릅니다만 많은 의견이나 지적 부탁드립니다.
차이점 :
- 스트레티지: 클래스 내부에서 쓰이는 처리기
- 데코레이터: 원본클래스 대신 쓰이는 처리기
개인적으로 내려본 결론
- 스트레티지: 처리가 긴 switch를 클래스화 할때
- 데코레이터: 어떤 객체의 주된 로직이 옵셔널하게 동작해야 할 때 (일부 로직을 공유함)
스트레티지 적용 전
class Test
{
public void Foo()
{
eCondition condition = 조건이 결정될 로직들을 수행하고 condition 변수로 받음;
switch( condition )
{
case A: 제법 긴 처리과정; break;
case B: 제법 긴 처리과정; break;
case C: 제법 긴 처리과정; break;
}
}
}
스트레티지 적용 후
class Test
{
public void Foo()
{
eCondition condition = 조건이 결정될 로직들을 수행하고 condition 변수로 받음;
// Proc_strategy 는 추상클래스. 하위클래스로 ProcA_strategy, ProcB_strategy, ProcC_strategy가 있으며 condition 값에 의해 동적 생성됨
Proc_strategy proc = new Proc_strategy( condition, this );
proc.doSomething();
}
};
데코레이터 제작
class ProcA_deco : Proc_deco
{
Proc_deco의 투명한 외투로서 모든 public 메서드를 지원
}
class ProcB_deco : Proc_deco
{
Proc_deco의 투명한 외투로서 모든 public 메서드를 지원
}
// 데코레이터 사용 (컨텍스트 코드 중...)
Proc_deco proc = new Proc_deco( condition );
proc.doSomething();