Strategy와 Decorator의 차이 (매우간단히)

22 views
Skip to first unread message

크로스

unread,
Jul 3, 2013, 10:53:25 PM7/3/13
to gamecodi-s...@googlegroups.com
6장이 끝날 무렵 제가
'스트레티지와 데코레이터의 차이를 잘 모르겠다' 
라고 한 적이 있는데
막상 중요한 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();
Reply all
Reply to author
Forward
0 new messages