@ 1. 디자인 원칙 : 애플리케이션에서 달라지는 부분을 찾아내고 달라지지 않는 부분으로부터 분리시킨다.
"즉 바뀌는 부분은 따로 뽑아서 캡슐화시킨다. 그렇게 하면 나중에 바뀌지 않는 부분에는 영향을 미치지 않은 채로 그 부분만 고치거나 확장할 수 있다."
@ 2. 디자인 원칙 : 구현이 아닌 인터페이스에 맞춰서 프로그래밍 한다.
" 각 행동은 인터페이스로 표현하고 행동을 구현할 때 이런 인터페이스를 구현하도록 한다. 상위 형식에 맞춰서 프로그래밍한다." : 실제 실행시에 쓰이는 객체가 코드에 의해서 고정되지 않도록 어떤 상위 형식(supertype)에 맞춰서 프로그래밍함으로써 다형성을 활요한다는 것
@ 3. 디자인 원칙 : 상속보다는 구성을 활용한다. 각 오리의 FlyBehavior와 QuackBehavior가 있으며 각각 행동과 꽥꽥거리는 행동을 위임 받습니다. 두 클래스를 이런식으로 합치는 것을 구성(composition)을 이용하는 것이라고 부른다. 구성을 이용하여 시스템을 만들면 유연성을 크게 향상시킬수 있다.
@ 개발이 끝난 후에 코드에 더 많은 시간을 쓰게된다. 그렇다면 코드의 재사용성보다는 관리의 용이성과 확장성에 더 많은 노력을 기울여야함은 자명하다.
스트래티지 패턴(Strategy Pattern)에서는 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.
어떤 객체의 행동을 스트래티지 패턴을 써서 구현하고 있다는 의미는 행동들을 쉽게 확장하거나 변경할 수 있는 클래스들의 집합으로 캡슐화되어 있다는 것을 의미, 실행중에도 확장/변경이 가능
어떤 객체의 행동을 스트래티지 패턴을 써서 구현하고 있다는 의미는 행동들을 쉽게 확장하거나 변경할 수 있는 클래스들의 집합으로 캡슐화되어 있다는 것을 의미, 실행중에도 확장/변경이 가능
예제 소스: