Interface
)을 만들어 접근점에서 서로 교환 가능(Deligate
)하도록 하는 패턴사용자(Client)는 자신에게 맞는 전략(Strategy)을 취사선택하여 로직을 수행할 수 있게하는 방법입니다.
게임을 예로들면 캐릭터는 공격이라는 작업을 수행함에 있어 무기를 상황에 맞게 선택해서 공격을 위임할 수 있습니다.
Weapon.java
public interface Weapon {
public void attack();
}
Knife.java
public class Knife implements Weapon{
@Override
public void attack() {
System.out.println("칼 공격");
}
}
Sword.java
public class Sword implements Weapon{
@Override
public void attack() {
System.out.println("검 공격");
}
}
GameCharacter.java
public class GameCharacter {
//접근점
private Weapon weapon;
//교환 가능
public void setWeapon(Weapon weapon) {
this.weapon = weapon;
}
public void attack(){
if (weapon == null) {
System.out.println("맨손 공격");
} else {
//위임(Delegate)
weapon.attack();
}
}
}
setWeapon
메서드를 통해 접근점을 변경할 수 있습니다.weapon.attack()
으로 weapon에게 공격기능을 위임합니다.