본문 바로가기

디자인패턴

[Strategy Pattern]

- 사람이 반려견과 함께 산책할 수 있는 클래스다이어그램이다. 우선 모든 Animal은 사람과 함께 산책할 수 있다. 사람은 혼자 산책하거나 고양이와 개와 함께 산책 할 수 있다.

public interface Animal {
    public void walk();
}
public class Cat implements Animal{

    @Override
    public void walk() {
        System.out.println("고양이와 산책하다");
    }
}
public class Dog implements Animal{
    @Override
    public void walk() {
        System.out.println("개와 산책하다.");
    }
}
public class Person {
    //공통 접근
    private Animal animal;

    //동물 변경
    public void setAnimal(Animal animal) {
        this.animal = animal;
    }

    public void walk(){
        if(animal==null){
            System.out.println("혼자 걷다.");
        }else{
            //델리게이트
            animal.walk();
        }
    }
}
public class Main {
    public static void main(String[] args) {
        Person person=new Person();
        person.walk();

        person.setAnimal(new Dog());
        person.walk();

        person.setAnimal(new Cat());
        person.walk();

    }
}

 

- 만약 사람에게 함께 산책할 수 있는 다람쥐라는 동물이 추가 되었다고 했을 경우에 Person객체는 변화가 없다. 

public class Squirrel implements Animal{

    @Override
    public void walk() {
        System.out.println("다람쥐와 산책하다.");
    }
}
public class Main {
    public static void main(String[] args) {
        Person person=new Person();
        person.walk();

        person.setAnimal(new Dog());
        person.walk();

        person.setAnimal(new Cat());
        person.walk();

        //추가
        person.setAnimal(new Squirrel());
        person.walk();
    }
}

- Person객체의 walk()라는 함수에 기능을 위임하여 느슨한 결합으로 변경 및 추가시 변경이 용이하다.