[디자인 패턴] 전략 패턴

전략 패턴은 알고리즘 또는 비즈니스 로직의 그룹이며 각각 상호 교환 가능합니다.
전략 패턴은 클라이언트를 건드리지 않고 알고리즘을 수정할 수 있도록 이를 사용하는 클라이언트에서 알고리즘을 분리합니다.

시나리오 문제

다음은 간단한 예입니다. Animal 클래스가 있고 4개의 다른 하위 클래스(Horse, Sheep, Lion 및 Bird)가 이 클래스에서 상속됩니다.


각 자식 클래스에서 eat()move() 메서드를 구현하는 것은 매우 간단할 수 있습니다. 그러나 때로는 일부 하위 클래스가 동일한 구현을 가질 수 있습니다.

이 예에서 볼 수 있듯이 말과 양은 동작이 동일합니다eat()(풀 먹기). 말, 양, 사자는 동작(걷기)이 동일move()합니다.
이제 이 코드 중복은 클래스가 4개뿐인 동안 약간의 나쁜 냄새를 보여줍니다. 10개 이상의 클래스가 있다면 얼마나 좋을지 상상해 보세요. 🤯


해결책

이제 전략 패턴이 등장합니다.
우리는 eat()move()를 EatStrategy와 MoveStrategy 인터페이스로 변경하고 Animal 클래스는 이러한 전략의 속성을 다음 다이어그램과 같이 가지고 있습니다.


이제 동물 클래스에서 먹기 및 이동 동작을 분리합니다. 장점은 움직이거나 먹는 동작(비즈니스 로그인)을 수정할 때 이전처럼 동물(이를 사용하는 클라이언트)을 만질 필요가 없다는 것입니다. 또한 중복 코드가 없습니다.

최종 코드는 다음과 같습니다.

MoveStrategy walk = new WalkStrategy();
MoveStrategy fly = new FlyStrategy();
EatStrategy eatGrass = new EatGrassStrategy();
EatStrategy eatMeat = new EatMeatStrategy();
EatStrategy eatGrains = new EatGrainsStrategy();

Animal horse = new Animal(walk, eatGrass);
Animal sheep = new Animal(walk, eatGrass);
Animal sion = new Animal(walk, eatMeat);
Animal bird = new Animal(fly, eatGrain);

좋은 웹페이지 즐겨찾기