总共1个接口,两个实现类,还有一个上下文类(总共三个类)
说策略模式消除了if-else语句的意思是:
如果传进Context类对象的是ConcreteStrategy1类的对象,那执行的就是策略1
如果传进Context类对象的是ConcreteStrategy2类的对象,那执行的就是策略2
step1:一个接口(抽象策略)
public interface Strategy
{
public int doStrategy();
}
step2:两个类都实现这个接口:(两个具体策略)
public class ConcreteStrategy1 implements Strategy
{
@Override
public int doStrategy()
{
System.out.println("执行策略1......");
return 1;
}
}
public class ConcreteStrategy2 implements Strategy
{
@Override
public int doStrategy()
{
System.out.println("执行策略2......");
return 2;
}
}
step3:再创建一个上下文类:(传入哪个具体策略类的对象,就调用哪个具体策略的方法)
public class Context
{
private Strategy strategy;
//构造方法
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void executeStrategy()
{
strategy.doStrategy();
}
}
step4:测试
ConcreteStrategy1 strategy1=new ConcreteStrategy1();
Context context1=new Context(strategy1);
context1.executeStrategy(); //输出:执行策略1
ConcreteStrategy2 strategy2=new ConcreteStrategy2();
Context context2=new Context(strategy2);
context2.executeStrategy();//输出:执行策略2