슈퍼 클래스에 새로운 기능을 넣고 싶을 때, 슈퍼 클래스에 메소드를 추가하면 끝일까?
→ 예외적으로, 한 서브클래스는 그 기능이 필요 없다면 어떻게 해야할까?(다른 동작이 필요하다던지?)
ex)
Duck이라는 클래스에 fly()라는 기능을 넣고싶은데, ToyDuck은 날수가 없다.
그러면 어떻게 해야할까??
필요한 기능을 인터페이스에 만들어놓고, 클래스를 만들 때마다 인터페이스를 구현하자?
→ 해당하는 행동을 만들었을 때에 대해서 코드 재사용을 전혀 기대할 수 없다.
→ 그래서 사용하게 된 게 전략패턴이다!
달라지는 부분을 찾아내고 달라지지 않는 부분으로부터 분리시킨다.
구현이 아닌 인터페이스에 맞춰서 프로그래밍한다.
알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.
알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.
변경할 부분이 없는 친구들을 모아둔다.