[디자인 패턴] 전략 패턴
전략 패턴은 클라이언트를 건드리지 않고 알고리즘을 수정할 수 있도록 이를 사용하는 클라이언트에서 알고리즘을 분리합니다.
시나리오 문제
다음은 간단한 예입니다. 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);
Reference
이 문제에 관하여([디자인 패턴] 전략 패턴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/edindevto/design-pattern-strategy-pattern-1cle텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)