Даже если вы не указали контекст своего приложения, кажется, что сценарий, который может использовать преимущества от применения Шаблон стратегии .
Код, который вы разместили, может быть урегулировандействовать как объект Context , отвечающий за управление условием более высокого уровня вашего внешнего оператора if-else.
В каждом блоке оператора if-else определенное поведение может быть загружено с помощью aa ConcreteStrategy объект (который обычно реализует интерфейс Strategy ).
Этот шаблон можно повторить для внутренних блоков if-else.
Пример
Рассмотрим игру, в которой персонаж перемещается по 2D-карте.В зависимости от его индикатора жизни (например, 0-200), он может перемещаться по 2,5,8 плитки, если он находится соответственно в усталом, нормальном или супер состоянии.
Персонаж объект действует как " Context шаблона стратегии, и у него есть ответственность, ответственность за которую MoveStrategy является правильной для ситуации. Придание жизни правильного MoveStrategy объекта и вызова путем пересылки метода move () через move () метода Character.
Подсказка для реализации Java примера:
public class Character{
private int life=100;
private int x=0
private int y=0;
private MoveStrategy strategy=new DefaultStrategy();
public int getLife(){
return life;
}
public void setLife(int value){
this.life=value;
}
public void move(){
if(life<30)
strategy=new TiredStrategy();
else if(life > 100)
strategy=new SuperStrategy();
else
strategy=new DefaultStrategy();
strategy.move();
}
}
public interface MoveStrategy{
public abstract void move();
}
public DefaultStrategy implements MoveStrategy{
public void move(){
System.out.println("Move character of 5 tiles");
}
}
public TiredStrategy implements MoveStrategy{
public void move(){
System.out.println("Move character of 2 tiles");
}
}
public SuperStrategy implements MoveStrategy{
public void move(){
System.out.println("Move character of 8 tiles");
}
}