728x90
Overview
동작을 클래스로 캡슐화하여 동작을 동적으로 변경할 수 있는 패턴
동일한 문제를 해결하는 많은 알고리즘이 클래스로 캡슐화되어 필요할 때 이를 대체하므로 동일한 문제를 다른 알고리즘으로 해결할 수 있습니다.
즉, 전략을 쉽게 변경할 수 있는 디자인 패턴입니다.
목적을 달성하기 위해 일을 하는 방식, 비즈니스 규칙, 문제를 해결하기 위한 알고리즘 등
전략
- 인터페이스나 추상 클래스를 통해 외부에서 같은 방식으로 알고리즘을 호출하는 방법을 지정합니다.
구체적인 전략
- 전략 패턴에 명시된 알고리즘을 실제로 구현하는 클래스
문맥
- 전략 패턴을 사용하는 역할을 합니다.
- 필요에 따라 특정 전략을 변경할 수 있는 세터 방식('집약적 관계')을 제공합니다.
Structure
Code Example
package com.example.design.pattern;
abstract class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
Duck() {
}
public abstract void display();
public void perfomrFly() {
flyBehavior.fly();
}
public void performQuack() {
quackBehavior.quack();
}
public void swim() {
System.out.println("All duck float, even decoys!");
}
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
public void setQuackBehavior(QuackBehavior quackBehavior) {
this.quackBehavior = quackBehavior;
}
}
interface FlyBehavior {
public void fly();
}
class FlyWithWings implements FlyBehavior {
@Override
public void fly() {
System.out.println("I'm Flying!!");
}
}
class FlyNoWay implements FlyBehavior {
@Override
public void fly() {
System.out.println("I can't fly");
}
}
interface QuackBehavior {
public void quack();
}
class Quack implements QuackBehavior {
@Override
public void quack() {
System.out.println("Quack!!");
}
}
class MuteQuack implements QuackBehavior {
@Override
public void quack() {
System.out.println("<< Silence >>");
}
}
class MallardDuck extends Duck {
public MallardDuck() {
flyBehavior = new FlyWithWings();
quackBehavior = new Quack();
}
@Override
public void display() {
System.out.println("I'm a real Mallard Duck");
}
}
public class MyStrategy {
public static void main(String[] args) {
Duck mallard = new MallardDuck();
mallard.performQuack();
mallard.perfomrFly();
mallard.setFlyBehavior(new FlyNoWay());
mallard.setQuackBehavior(new MuteQuack());
mallard.performQuack();
mallard.perfomrFly();
}
}
Console Result
Quack!!
I'm Flying!!
<< Silence >>
I can't fly
Conclusion
N/A
728x90
'Java Design Pattern' 카테고리의 다른 글
[ENG][디자인패턴]Abstract Factory 패턴 이론과 설명 (0) | 2022.06.17 |
---|---|
[ENG][디자인패턴]Composite 패턴 이론과 설명 (0) | 2022.06.07 |
[ENG][디자인패턴]Adapter 패턴 이론과 설명 (0) | 2022.06.06 |
[ENG][디자인패턴]Template Method 패턴 이론과 설명 (0) | 2022.06.04 |
[ENG][디자인패턴]State 패턴 이론과 설명 (0) | 2022.06.02 |
[ENG][디자인패턴]Singleton 패턴 이론과 설명 (0) | 2022.06.01 |
[ENG][디자인패턴]Observer 패턴 이론과 설명 (0) | 2022.05.31 |
[ENG][디자인패턴]MVC 패턴 이론과 설명 (0) | 2022.05.30 |