Strategy Pattern
필요한 알고리즘을 캡슐화 시켜서 상황에 맞게 사용하는 방법
코드
public class StrategyPatternPractice {
public static void main(String[] args) {
Tiger tiger = new Tiger("Tiger", new Walk());
Bird bird = new Bird("Bird", new Fly());
tiger.doMove();
bird.doMove();
}
}
- 알고리즘 인스턴스를 만들어 생성자로 넘겨준다
interface Move {
String move();
}
- 캡슐화 알고리즘을 만들기 위해 인터페이스를 정의
class Fly implements Move {
@Override
public String move() {
return "Fly";
}
}
class Walk implements Move {
@Override
public String move() {
return "Walk";
}
}
- 인터페이스를 상속 받아 각각의 알고리즘을 구현한다
class Tiger {
private String name;
private Move move;
public Tiger(String name, Move move) {
this.name = name;
this.move = move;
}
public void doMove() {
System.out.println(getName() + " " + move.move());
}
public String getName() {
return name;
}
}
class Bird {
private String name;
private Move move;
public Bird(String name, Move move) {
this.name = name;
this.move = move;
}
public void doMove() {
System.out.println(getName() + " " + move.move());
}
public String getName() {
return name;
}
}
- 해당하는 클래스 마다 생성자에서 인터페이스로 캐스팅시켜서 할당한다