Asta07
186 words
1 minutes
전략 패턴

전략 패턴(Strategy Pattern)#

이 패턴은 팩토리 패턴과 비슷합니다. 캡슐화를 하며, 실행 코드를 서로 공유하는것을 목적으로합니다.

예시#

trait Shape {
    fn draw(&self);
}

struct Circle;
struct Square;

impl Shape for Circle {
    // draw알고리즘
    fn draw(&self) {
        println!("Drawing Circle");
    }
}

impl Shape for Square {
    // draw알고리즘
    fn draw(&self) {
        println!("Drawing Square");
    }
}
struct Context {
    shape: &'static dyn Shape,
}

impl Context {
    fn new(shape: &'static dyn Shape) -> Self {
        Self { shape }
    }
    fn draw(&self) {
        self.shape.draw();
    }
}

fn main() {
    let ctx1 = Context::new(&Circle);
    ctx1.draw();
    let ctx2 = Context::new(&Square);
    ctx2.draw();
}
note

실행해보기

장점#

  • 알고리즘 변경이 쉬워 유연하게 작업할수 있다.
  • 각각의 알고리즘을 쉽게 테스트할수 있어 유연하다.