전략 패턴


Strategy Pattern
(전략 패턴)

행위 패턴(Object Behavioral)

추상화한 전략 객체에게 수행을 위임시키기 때문에
전략 객체를 상속받아 구체화객체군은 상호교환이 가능해진다
즉, 요청의 변경없이 객체의 행동들이 통째로 변경된다

상황에 따라 유연하게 대응할 수 있지만, 생성되는 객체의 수가 많아지고
객체군의 성격에 맞게 일반화에 신경써서 구현해야만한다

// 추상화한 전략 객체
public interface Animal {
    public String say();
}

...

// 전략 객체를 상속받아 구체화된 객체군
public class Dog implements Animal {
    @Override
    public String say() { return "왈왈"; }
}

public class Retriever implements Animal {
    @Override
    public String say() { return "안녕하세요"; }
}

public class Human implements Animal {
    @Override
    public String say() { return "배고파"; }
}

...

public class ZooCage {
    private Animal animal;

    public void setAnimal(Animal animal) {
        this.animal = animal;
    }

    public void sound() {
        // 요청 수행을 위임
        System.out.println(animal.say());
    }
}

...

public class Main {
    public static void main(String[] args) {
        ZooCage zooCage = new ZooCage();

        // 요청의 변경없이 객체의 행동들이 통째로 변경 됨
        zooCage.setAnimal(new Dog());
        zooCage.sound(); // "왈왈"

        zooCage.setAnimal(new Retriever());
        zooCage.sound(); // "안녕하세요"

        zooCage.setAnimal(new Human());
        zooCage.sound(); // "배고파"
    }
}

댓글남기기