티스토리 뷰
Strategy Pattern - 디자인 패턴
참고서적 : Head First Design Pattern
소스코드 다운로드 : http://www.wickedlysmart.com/headfirstdesignpatterns/code.html
자바의 디자인 패턴을 좀 정리해 두려고 합니다.
나중에 찾아보기 편하려구요~~ 앞으로 이 부분을 공부하면서 연재할 계획입니다.!!
패턴 정의 #1 - Strategy Pattern
스트래티지 패턴 (Strategy Pattern)에서는 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.
스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.
디자인 원칙
1. 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다.
2. 구현이 아닌 인터페이스에 맞춰 프로그래밍한다.
3. 상속보다는 구성을 활용한다.
음.. 설명이 좀 어렵습니다.
특정 클래스(클라이언트)의 여러 가지 행동(알고리즘군)들이 존재할 수 있다면, 이러한 행동들을 인터페이스로 캡슐화해서..
특정 클래스에 인스턴스로 가지고 사용한다는 겁니다.
그렇게 함으로써 특정 클래스와 행동들이 서로 독립적이라는 것이죠..
더 여러워 지나요?
다음 그림을 살펴보면 이해가 될 겁니다.
클라이언트에서는 나는 행동과 꽥꽥거리는 행동 모두에 대해서 캡슐화된 알고리즘군을 활용합니다.
각 행동의 집합을 알고리즘군으로 생각합니다.
이런 행동 "알고리즘"은 바뀔 수 있습니다.
fly() 메소드는 모든 Duck 클래스마다 다를 수 있습니다.
먼저 fly() 메소드를 Duck 클래스의 abstract 메소드로 두고 상속으로 처리할 수도 있습니다.
하지만, 그럴 경우 같은 동작을 하는 fly() 메소드도 모든 하위 클래스에서 구현되어야 합니다.
소스 코드의 중복이 발생할 수 있는 것이죠~~
그래서 FlyBehavior 인터페이스를 만들고 Duck 클래스의 인스턴스로 사용하는 겁니다.
performFly() 메소드를 통해 fly()메소드의 수행을 FlyBehavior 인터페이스로 넘겨주는 거죠~
setFlyBehavior() 메소드를 통해 동적으로 flyBehavior를 지정할 수 있도록 해주기도 합니다.
이거는 정리하는 차원이라 간단하게 합니다. ^^
그럼.. 좋은 하루 되세요~~ From 미니
'XML Developer > 디자인 패턴' 카테고리의 다른 글
[디자인 패턴#6] 싱글턴 패턴 (0) | 2007.05.22 |
---|---|
[디자인 패턴#5] 추상 팩토리 패턴 (0) | 2007.05.09 |
[디자인 패턴#4] 팩토리 메소드 패턴 (0) | 2007.05.03 |
[디자인 패턴#3] 데코레이터 패턴 (0) | 2007.04.27 |
[디자인 패턴#2] 옵저버 패턴 (0) | 2007.04.24 |
댓글
Blog is powered by
Tistory / Designed by
Tistory